x보다 큰 문자열에서 숫자를 찾기 위해 정규식을 작성할 수 있습니까?
예를 들어 x = 1800
문자열에있는 숫자> 1800을 찾을 수 있습니까? "3,000.00 / month"| "$ 2800"| "월 150,000.00"| "단지 $ 1900"등? 정규식은 모두 1899보다 크므로 3,000.00, 2800, 150,000.00 및 1900을 찾습니다.
나를 감추는이 패턴은 ..
정규식을 사용하면 숫자보다 더 큰 형식이 잘 지정된 숫자를 찾을 수 있지만 숫자가 커질수록 더 복잡해집니다.
x = 11이고 11보다 큰 문자열에서 숫자를 찾으려고하는 간단한 예부터 시작해 보겠습니다. 작성하려는 정규식은 아래 솔루션과 유사한 패턴을 따릅니다.
(\d{3,}|[2-9]\d|1[2-9])(\.\d+)?|11\.\d*[1-9]\d*
처음 세 개의 내부 교대의 목적은 무엇입니까? 첫 번째는 3 자리 이상의 숫자, 두 번째는 10 자리의 숫자가 2-9 인 2 자리 숫자, 10 자리의 숫자가 1이고 1의 숫자 인 마지막 2 자리 숫자를 캡처합니다. 장소는 2-9입니다. 그런 다음 선택적으로 십진수 십진수를 캡처합니다.
두 번째 외부 교대는 실제로 정수 부분의 x와 일치하지만 소수점 부분이 어떻게 든 더 큰지 확인합니다. x의 소수 부분이 12이면 120*\d*|1[3-9]\d*|2\d*
.
위의 패턴이 작동하지 않는 두 가지 상황이 있습니다.
아래 예에서는 이러한 경우도 처리하고 x = 1800에 대해 해결합니다.
#FIND any number > 1800
(?=[1-9]) # ensure number doesn't begin with a zero
(
(\d{1,3},(?=\d{3}))*\d{2,3},\d{3}| # any number that has >= 5 digits with commas
\d{5,}| # any number that has >= 5 digits without commas
[2-9],?\d{3,}| # any 4 digit number that starts with 2-9
1,?9\d{2}| # any 4 digit number that starts with 1 then 2-9
1,?8[1-9]\d| # any 4 digit number that starts with 18 then 1-9
1,?80[1-9] # any 4 digit number that starts with 180 then 1-9
)
(\.\d+)? # any decimal digits
|1,?800\.\d*[1-9]\d* # any number whoses integer = 1800,
# ... then has a decimal with a non-zero digit.
정규식의 맨 위에는 숫자가 실제로 1-9로 시작하는지 확인하기 위해 미리보기를 사용합니다. 그것이 없으면 00005와 같은 숫자는 5 자리 숫자로 혼동 될 것입니다.
내부 그룹은 첫 번째 예에서 11보다 큰 숫자를 일치 시키려고 시도한 것처럼 1800보다 큰 모든 정수 일치를 찾습니다. 아마도 명백하지 않은 유일한 교대는 첫 번째- (\d{1,3},(?=\d{3}))*\d{2,3},\d{3}
. 5 자리 이상의 숫자를 찾기 위해 1-3 자리 숫자와 쉼표, 2-3 자리 숫자, 쉼표, 마지막 3 자리 숫자를 찾습니다. 미리보기가 없으면 234,23,412와 같은 숫자가 아닌 것과 잘못 일치합니다.
내가있는 것처럼 쉼표에 대해 까다로울 경우 1,?9\d{2}
=> 1914 & 1,914 와 같이 쉼표와 쉼표가 아닌 경우를 통합 할 수 없습니다 . ,?
백만 개보다 큰 수를 찾으려고 할 때 여러 개가 있으면 1000,050과 같은 잘못된 일치가 발생합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다