2017-11-03 4 views
2

컨텍스트 : 너무 길고 html 테이블의 열 머리글로 사용되는 문자열을 분할해야합니다. 이러한 문자열은 변수 이름이므로 공백이 없습니다.정규식을 사용하여 유연하게 문자열을 분할합니다.

CSSmax-width 속성을 사용하면 문자열이 고정 된 위치에서 분리되어 점에 사용하지 않거나 문자열에 _의 문자를 사용하지 않습니다.

예를 들어, 내가이 문자열이 있다고 가정

this.is.a.long.string.indeed.yeah.well.you.know 

를 구분자로 점을 사용하여, 나는 많은, 여러 가지 방법으로 나눌 수 있습니다. 그러나 나는 이러한 원칙을 제기 :

  1. 모든 문자열은 12 자 이상이어야합니다 이하
  2. 구분 [._]하지 문자열의 시작 부분, 끝 부분에 있어야
  3. 문자열의 수는해야 최소한이어야 함
  4. 여러 솔루션이있는 경우 가장 유사한 하위 문자열 길이를 갖는 솔루션이 선호됩니다.

나는 R을 사용하여 프로그래밍 방식으로이 작업을 수행 할 수 있지만 정규 표현식을 사용하여 가능한지 여부를 확인하기 위해 정규 표현식 마법사를 사용하고 있습니다.

내가 지금까지 무엇을 가지고 :

정규식 : .{1,12}(_|\b|\Z)

결과 : 그것은 어떤 구분없이 문자의 긴 순서가있는 경우를 제외하고 잘 작동 this.is.a. | long.string. | indeed.yeah. | well.you. | know

. this example on regex101.com을 참조하십시오.

가능한 한 구분 기호가 사용되며 구분 기호없이 12 자보다 긴 시퀀스가있는 경우 대체 분할이 발생하는 것이 이상적입니다.

+4

단어 래퍼 기능 (R을 모르겠다)이있는 경우 점을 공백으로 대체하고 함수가 감싸고 공백을 점으로 바꾸도록 할 수 있습니다. – yacc

+1

'strwrap'은 단어 래퍼 함수입니다. – rawr

+0

이 제안에 감사드립니다. 좋은 결과를 얻었으므로 구분 기호없이 12 자 이상의 연속열을 분할하는 데 약간의 작업이 필요했습니다. –

답변

3
당신은, 당신은 단지 구분자가 발견되지 않는 경우에 다른 대안을 제시 너무 가까이 필요했다

: https://regex101.com/r/XrJuYj/2/

편집 :

.{1,12}(_|\b|\Z)|.{1,12} 

를 확인 분할 부분이 포함되어 보장하기 위해 https://regex101.com/r/XrJuYj/3

:

(?=.{1,12}(.*))(?=.*?[^\W_].*?[\W_].*?\1).{1,12}(?<=_|\b|\Z)|.{1,12} 

에 그것을 참조 : 비 분리 문자는 다음을 사용할 수 있습니다

+0

답변 해 주셔서 감사합니다. 조금 문제가 있습니다 : 하나의 그룹은 하나의 점으로 구성됩니다. –

+0

아, 문제가되는 경우 정규식을 세분화 된 테스트로 업데이트하여 그러한 경우를 피하기 위해 구분 기호 앞에 비 분리 기호가 실제로 처음 12 자에 실제로 들어 있는지 확인하십시오.그렇지 않으면 대체 대안으로 이동합니다. – jaytea

+0

당신이 정말로있는 정규 표현식 마법사입니다. 그것은 매력처럼 작동합니다, 많이 고마워요! –