2013-01-17 2 views
0

텍스트 줄에서 double을 구문 분석하려고합니다. 나는 내가 원하는 것을하고 있다고 생각하는 몇 줄의 코드를 발견했다. 그러나, 나는 그것이 부정적인 복소수를 구문 분석하지 않을 것이라는 것을 발견했다. 나는 완전히 새로운 정규 표현식이고 약간은 압도적이다. 누군가가 아래 코드를 설명하고 각 부분의 의미를 말해 줄 수 있는지, 그리고 그것을 수정하여 양수와 음수를 모두 파싱 할 수 있는지 궁금합니다. 미리 감사드립니다!자바 : 양수 및 음수 이중 분석을위한 정규식

double nextDouble; 
Matcher matcher = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)").matcher(line); 
if (matcher.find()) nextDouble = Double.parseDouble(matcher.group(1))); 

편집 : 다음은 행의 예입니다. "104.44518717, 34.09785265, 103.39288764, 0.09813121, 0.00000000, -0.46612322, 4.68576504"

그것은 구문 분석 -0.46612322 0.46612322한다.

+6

특정 이유를 사용 대하여 [사용해 Double.parseDouble() (http://docs.oracle.com/javase/1.4.2/docs/api/java /lang/Double.html#parseDouble%28java.lang.String%29)? –

+4

Scanner.nextDouble()? –

+1

@FlorianPeschka - 코드를 살펴보십시오. 문자열 내부에서 잠재적 double을 얻은 후에는 Double.parseDouble()을 사용합니다. –

답변

2

표현은 두 부분으로 구성됩니다.

괄호 안의 첫 번째 부분은 일치하는 문자열 앞에 및 점이 표시되지 않도록합니다. 도움이 될 샘플 라인을 제공하는 경우 그 부분이 왜 필요한지 잘 모릅니다.

브래킷의 두 번째 부분이 일치하는 부분입니다. 그것은 단지 하나 이상의 숫자와 포인트와 일치합니다.

음수로 표현식을 사용하려면 '-'문자를 해당 세트에 추가하면됩니다.

(?!=\\d-\\.)([-\\d\\.]+) 

하지만이 표현은 여러 점 (점)이있는 문자열과 일치합니다. 예 : 122.12.12

그래서 다음을 시도해보십시오. 첫 번째 부분이 제거되었습니다.

(-?(\\d)+(\\.)?(\\d)*) 
+1

더 나은 :'-? \\ d + (\\. \\ d *)?''group (1)'이 아닌'group (0)'을 사용하십시오. –

+0

@MarkoTopoliik 예, 그렇습니다. "123"과 같은 것을 원하지 않는다면 그렇게 할 수 있습니다. – harun

1

다음 정규식보십시오 : 당신이

(-?\\d+\\.\\d+) 
+0

그게 작동하지 않았다. 내 게시물을 예제 라인으로 편집했습니다. – kaptaincooke

+0

나는 그것을 검사했고 잘 작동한다. – hsz

+0

이것은 정수 표현을 허용하지 않습니다. 이는 double에 적합합니다. –

0

이 시도 :

"((\\d+\\.?\\d*)|(\\.\\d+))(([Ee][+-]?)?\\d+)?" 
관련 문제