문제

웹 페이지에서 무한한 수의 수치를 일치시켜야합니다.

다음 형식을 모두 일치시킬 수 있어야합니다.

100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$

그리고 쉼표를 사용하는 등가 :

444,333
22,333
1,222
11,111,111
333,333,333,333.01132

또는 공간 :

444 333
22 333
1 222
11 111 111
333 333 333 333.01132

이것은 나에게 정말 어려운 것입니다. 나는 Regexp와 함께 노는 데 익숙하지만 방탄 증명을 완전히 쓰지 못했습니다. 대개 http://www.regexlib.com 해결책은 있지만 이것에 대한 것은 아닙니다.

일반 텍스트 검색/교체이기 때문에 Regexp를 사용하는 것 외에 다른 방법을 생각할 수 없습니다.

도움이 되었습니까?

해결책

다음은 제공 한 모든 숫자 형식과 일치하는 정규 표현식입니다.

^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$

분류하려면 :

  • ^(?:\$\s*)? 문자열 시작시 선택적 $를 찾은 다음 공백의 양을 찾습니다.
  • (?:(?:\d{0,3}(?:[, ]\d{0,3])*[, ])+\d{3}|\d*) 쉼표 또는 공간으로 분리 된 그룹으로 분류 된 숫자와 일치합니다 (\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}) 또는 숫자 문자열 (\d+) - 그래서 123,456,789, 123 456 789 및 123456789는 모두 일치합니다. 정규 표현식은 부적절한 그룹화가있는 숫자를 허용하지 않습니다 (따라서 123,45,6789는 일치하지 않습니다)
  • (?:\.\d*)? 숫자를 선택적 소수점과 그 다음에 숫자와 일치시킵니다.
  • (?:\s*\$)?$ 문자열 끝에 옵션 $와 일치하며 모든 공간이 선행됩니다.

다른 팁

여러 글을 쓸 수있을 때 1 regexp를 작성하고 차례로 적용하는 이유는 무엇입니까?

나는 당신이 라인별 라인을 통해 반복 할 수 있다고 가정합니다 (?). 쉼표에 정통한 regexp를 시도한 다음 공간에 정통한 regexp 등을 시도해보십시오. 일치하는 경우 나머지는 귀찮게하지 말고 결과를 저장하고 다음 줄로 이동하십시오.

두 단계 로이 작업을 수행하는 것은 어떻습니까 :

먼저 모든 공간을 ''로 교체하십시오.

그런 다음 숫자 형식이 항상 동일하면 쉼표를 ''로 바꿀 수 있습니다.

그 후, 꽤 쉽지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top