달러 통화에 대한 정규식을 만들고 싶습니다. 이 예제는 정규식으로 찾을 수 있습니다 :
$ 10
10$
10 $
1000005 dollars
이것은 일치하지 않아야합니다 :
dollars 33
이미이 표현을 사용했습니다 :
r_dollar = r'(\$|\$usd|usd|dollar(s)?|bucks)'
number = '([1-9]([0-9])+)'
valuta_with_num = u'(({0})\s?{1})|({1}\s?({0}))'.format(number, r_dolar)
currency_tags = re.compile(u'({0})'.format(valuta_with_num))
어떻게하면 되나요?
-
답변 # 1
-
답변 # 2
아마도 이것을 달성하는 가장 쉬운 방법은 여러 대안을 만드는 것입니다 :
(\$\s*\d+|\d+\s*\$|\d+\s+dollars|1 dollar)
여기를 참조하십시오 : https://regex101.com/r/sAiDOo/2
사소한 접근 방식이지만 훌륭하게 작동합니다. 사용 사례에 따라 줄 바꿈 괄호가 필요하지 않을 수 있습니다.
설명 :
우리는
<올>|
로 구분 된 4 가지 옵션을 사용할 수 있습니다. (파이프).\$\s*\d+
: 달러 기호를 검색하고 (이스케이프해야 함) 여러 공백 (*
) : 0 이상) 및 하나 이상의 숫자 (+
) : 1 이상)\d+\s*\$
: 다른 방법으로도 같은 일이 발생합니다. 최소한 한 자리를 검색 한 다음 공백을 몇 개, 달러 기호를 검색합니다.\d+\s+dollars
: 하나 이상의 숫자, 하나 이상의 공백, 달러 단어가 검색됩니다.1 dollar
: 정확한 문자열1 dollar
검색dollars
와 일치하지 않으므로, (복수). -
답변 # 3
사용할 수 있습니다
import re strs = ['Some $ 10 here', 'And 10$ here', 'And 10 $ here', 'And 1000005 dollars here', 'And dollars one million and five here'] r_dollar = r'(?:\$(?:usd)?|(?:dollar|buck)s?)' # USD dollar name r_textnumber = r'\b(?!\s)(?:[\sa-]|zero|one|tw(?:elve|enty|o)|th(?:irt(?:een|y)|ree)|fi(?:ft(?:een|y)|ve)|(?:four|six|seven|nine)(?:teen|ty)?|eight(?:een|y)?|ten|eleven|forty|hundred|thousand|[mb]illion|and)+\b(?<!\s)' r_number = r'(?:[1-9][0-9]+|{})'.format(r_textnumber) # Dollar amount valuta_with_num = r'{0}\s?{1}|{1}\s?{0}'.format(r_number, r_dollar) # Main regex print(valuta_with_num) currency_tags = re.compile(valuta_with_num) for s in strs: print(currency_tags.findall(s))
Python 데모 온라인을 참조하십시오. 출력 :
['$ 10'] ['10$'] ['10 $'] ['1000005 dollars'] ['dollars one million and five']
숫자를 단어로 일치시키는 정규식 부분은
\b(?!\s)(?:[\sa-]|zero|one|tw(?:elve|enty|o)|th(irt(een|y)|ree)|fi(?:ft(?:een|y)|ve)|(?:four|six|seven|nine)(?:teen|ty)?|eight(?:een|y)?|ten|eleven|forty|hundred|thousand|[mb]illion|and)+\b(?<!\s)
\b(?!\s)
-공백이없는 단어 경계(?:\s|[a-]|zero|one|tw(?:elve|enty|o)|th(irt(een|y)|ree)|fi(?:ft(?:een|y)|ve)|(?:four|six|seven|nine)(?:teen|ty)?|eight(?:een|y)?|ten|eleven|forty|hundred|thousand|[mb]illion|and)+
-하나 이상의 공백 반복,a
-
zero
, ...,nine
ten
eleven
twelve
...,twenty
hundred
thousand
million
그리고billion
\b(?<!\s)
-공백이없는 단어 경계. -
답변 # 4
@christoph에 동의합니다 하지만 다른 방식으로 생각하면 단축 될 수 있습니다
^(\$|\d+)(\s*)(\d+|dollar|dollars|\$)$
실제로보기-https://regex101.com/r/IWnHni/1
설명
<올>첫 번째 그룹 (브래킷)은 $또는 숫자와 같이 첫 번째로 올 수있는 것을 알려줍니다
두 번째 그룹은 공간입니다
세 번째 그룹은 $, 달러 또는 달러 또는 숫자와 같이 공백 뒤에 올 수있는 내용을 알려줍니다.
이것이 도움이되기를 바랍니다
관련 자료
- javascript - 가격 문자열에서 통화 기호를 추출하는 정규식을 정의하는 방법은 무엇입니까?
- regex - 정규식 몇 가지 가비지 데이터 후 IP와 포트를 일치시키는 방법
- ios - Swift에서 String의 링크를 제거하는 정규식
- javascript - 정규 표현식에 대해 hasMatch를 확인하는 방법
- php - str - : larala의 함수 정규식을 전달하는 방법
- regex - 문자열을 포함하지 않는 처음 두 줄을 캡처하는 정규식
- java - 정규식에서 숫자를 가져 와서 특정 텍스트와 일치하도록 전달하는 방법은 무엇입니까?
- regex - 파이썬에서 데이터 프레임 문자열을 열로 분할하는 정규식
- java - 정규 표현식을 사용하여이 문자열 '-25 + 26 + 78-21'을 분할하여 -25,26,78, -21을 얻으려면 어떻게해야합니까?
- python - 모든 문자 bi-gram에 대한 정규식
- c# - 대문자로 시작하고 그 뒤에 소문자가 오는 정규식은 무엇입니까?
- java - 문자 사이의 예외 메시지에서 이메일 ID를 검색하려면 정규식이 필요합니다
- regex - 루비에서 작동하지 않는 여러 줄 정규식
- Google 스프레드 시트 QUERY 함수에서 간단한 정규식을 사용할 수 없습니다
- c# - HTML에서 @Razor 참조를 찾기위한 정규식
- jax rs - 수 정규 표현식이있는 JAX-RS 경로
- javascript - 입력 한 사용자 이름을 필터링하는 정규식 작성
- regex - 측정 값 및 차원을 얻기 위해 정규식으로 DAX 쿼리 구문 분석
- regex - 정규식의 일부가 후속 분할 문자열에 보관 될 때 정규식으로 R에서 문자열을 분할하는 방법은 무엇입니까?
- regex - \ 및]와 함께 작동하지 않는 정규식
- 파이썬에서 정규식 (refindall)을 사용하여 텍스트에서 15 자리 문자열 추출
- regex - 마침표가 두 개인 이메일 주소를 확인하는 방법 (Python)
- 로그 파일에서 스레드 이름을 가져 오는 Python 정규식
- python - pandas - int 하위 문자열을 다른 값으로 바꾸는 방법
- json - 파이썬 - 올바른 형식이 아닌 목록
- python - extcolor에서 RGB 값만 가져 오는 방법
- python - 정규식 바꾸기를 시도 할 때 예기치 않은 물음표
- python - pandas 데이터 프레임에서 열 순서 지정 및 이름 바꾸기 - 우아한 솔루션 가능?
- regex - 문자열에서 패턴을 검색하고 파이썬을 사용하여 문자열의 특정 부분 만 출력하려면 어떻게해야합니까?
- Regex - 정규식 - 하이픈 뒤의 텍스트를 python의 사전으로 추출
대체를 사용하는 다른 옵션은 다음과 같습니다.
설명
(?:
비 캡처 그룹\$\s*\d+
달러 기호 (공백 문자와 0 자릿수 + 1을 곱한 숫자)와 일치|
또는\d+\s*
1 개 이상의 숫자와 0 개 이상의 공백 문자를 찾습니다(?:
비 캡처 그룹\$?usd|\$|dollars?|bucks
\$?
옵션 중 하나와 일치 선택적인 달러 기호입니다.)
캡처하지 않은 그룹 닫기)
캡처하지 않은 그룹 닫기정규 데모