2011-03-19 3 views
3

공백이 있고 공백이 아닌 음수 기호가 오는 경우 문자열을 분할하는 정규식을 작성하려고합니다.Java RegEx : 토큰 손실없이 분할하십시오.

예 :

현재
"x -y".split(regex) 
returns: String[]{"x","-y"}; 

내 정규식에 대한

(?<=\\s)-(?=\\S+) 

를 사용하고 있습니다; 그러나 "x", "y"를 반환하고 음수 기호를 먹습니다. 음수 기호를 먹지 않는 방법이 있습니까?

감사합니다.

+0

'\ s (? = \ - \ S)'아마도? 공백을 찾으십시오. 그러나 공백이 아닌 문자 뒤에 음수 부호가 있는지 확인하십시오. ([demo] (http://regexr.com?2tba2)) –

답변

2

패턴 :

\s(?=\-\S) 

예 "경기

데모에

String: x -y z -x y z 
Matches: ^^

caret의 포인트 :

Example Code

2

분할하는 데 사용되는 빼기 기호를 캡처하고 있습니다. 따라서 제거됩니다.

두 가지 가능한 솔루션 :

A)가 거기에있을 그렇지 않으면 분할이 결과를 B를 반환하지 것 때문에) 두 번째 경기에 추가하는 대신 (\S*) (\S.*)을 시도하고 일치 해. 그러면 두 개의 결과 인 "x"와 "-y"가 반환됩니다.

split 함수가 그렇게 간단한 경우에는 split 함수를 사용하는 것이 좋습니다. 정규식보다 훨씬 빠릅니다.

var result = "x -y".split(" -"); 
if (result.length == 2) result[1] = "-" + result[1]; 

http://gskinner.com/RegExr/은 정규식을 확인하기에 좋은 사이트입니다. 정규식과 하워드를 비교하면 그 차이가 나타납니다. 너가 나의 것을 가지고 가고 성냥을 역시하면,.

0

항상 분할 할 값 사이에 공백이있을 경우, 같은 것을 사용하는 것이 좋습니다 :

"X -y".split ("-");

-을 다시 입력해야합니다 (필요한 경우).

+1

음수 부호가있는 경우에만 분할해야합니다. 그러나 당신은 "-"로 나눌 수 있습니다. – Zebi

+0

감사합니다. 내 답변에 제안을 포함 시켰습니다. – Davidann

3

당신은 두 번째 그룹

\\s(?=-\\S+) 

이 당신에게 원하는 결과를 제공에 마이너스를 포함 할 수있다.