점과 일치하는 정규식
가장 좋은 방법이 무엇인지 궁금했습니다."test.this"
부터"blah blah blah test.this@gmail.com blah blah"
파이썬을 사용하고 있습니다.
해봤습니다re.split(r"\b\w.\w@")
A .
regex는 메타 문자이며 모든 문자와 일치하는 데 사용됩니다.원시 Python 문자열에서 리터럴 도트를 일치시키는 방법(r""
또는r''
), 당신은 탈출해야 합니다.r"\."
당신의 정규식에서 당신은 점을 탈출해야 합니다."\."
또는 문자 클래스 내에서 사용합니다. "[.]"
정규식의 메타 문자이므로 모든 문자와 일치합니다.
또한, 당신은 필요합니다.\w+
대신에\w
하나 이상의 단어 문자와 일치합니다.
자, 당신이 원한다면,test.this
내용, 그렇다면split
당신이 필요로 하는 것이 아닙니다.split
당신의 끈을 둘로 나눌 것입니다.test.this
예:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
다음을 사용할 수 있습니다.
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"기본 모드에서 도트(.)는 새 줄을 제외한 모든 문자와 일치합니다.DOTALL 플래그가 지정된 경우, 새 줄을 포함한 모든 문자와 일치합니다." (python Doc)
따라서 점 문자적으로 평가하려면 대괄호로 묶어야 한다고 생각합니다.
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
다음은 @Yuushi의 주요 답변에 대한 추가 기능입니다.
요약
이러한 항목은 허용되지 않습니다.
'\.' # NOT a valid escape sequence in **regular** Python single-quoted strings
"\." # NOT a valid escape sequence in **regular** Python double-quoted strings
다음과 같은 경고가 발생합니다.
사용 안 함 경고: 잘못된 이스케이프 시퀀스
\.
그러나 이 모든 것은 허용되며 동등합니다.
# Use a DOUBLE BACK-SLASH in Python _regular_ strings
'\\.' # **regular** Python single-quoted string
"\\." # **regular** Python double-quoted string
# Use a SINGLE BACK-SLASH in Python _raw_ strings
r'\.' # Python single-quoted **raw** string
r"\." # Python double-quoted **raw** string
설명.
명심해, 백슬래시 (\
) 일반 문자열 내부에서 사용할 경우 파이썬에서 char 자체를 이스케이프해야 합니다('some string'
또는"some string"
raw string() 대신r'some string'
또는r"some string"
사용 중인 문자열의 유형을 기억하십시오.점 또는 마침표 탈출(.
) 정규 python 문자열의 정규 표현식 내부에서, 따라서 이중 백슬래시()를 사용하여 백슬래시를 탈출해야 합니다.\\
), 의 총 이스케이프 시퀀스를 만듭니다..
정규식에서 다음과 같이 입력합니다.\\.
위의 예에 나타난 바와 같이.
레퍼런스
- 기본 및 공식 참조: https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
- [@Sean Hammond의 답변] 파이썬에서 "<string> 폐지 경고: 잘못된 탈출 시퀀스"를 수정하는 방법?
만약 당신이 리터럴을 넣고 싶다면.
\
당신이 사용해야 하는 문자열에서.\\
점을 포함한 문자열 변수의 영숫자가 아닌 문자를 이스케이프하려면 다음을 사용할 수 있습니다.
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
출력:
whatever\.v1\.dfc
이스케이프 식을 사용하여 문자열을 문자 그대로 찾거나 일치시킬 수 있습니다.
이 표현은.
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
또한 이러한 특정 유형의 입력 문자열에 대해서도 정상적으로 작동할 수 있습니다.
데모
시험
import re
expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)'
string = '''
blah blah blah test.this@gmail.com blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah test.this.this@gmail.com blah blah
'''
matches = re.findall(expression, string)
print(matches)
산출량
['test.this']
표현을 단순화/축소/축소하려면 regex101.com 의 오른쪽 상단 패널에 설명되어 있습니다.원하는 경우 이 링크에서 샘플 입력과 어떻게 일치하는지 볼 수도 있습니다.
자바스크립트에서 당신은 사용해야 합니다.\\.
점을 맞추기 위해.
예
"blah.tests.zibri.org".match('test\\..*')
null
그리고.
"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]
언급URL : https://stackoverflow.com/questions/13989640/regular-expression-to-match-a-dot
'programing' 카테고리의 다른 글
장고 모델에서 외부 키 필드를 선택적으로 만드는 방법은 무엇입니까? (0) | 2023.07.20 |
---|---|
파이썬: 삐 소리 내기 (0) | 2023.07.20 |
Python 하위 프로세스 popen 사용 방법 (0) | 2023.07.20 |
가장 많이 발생한 값을 포함하는 모든 행 반환 (0) | 2023.07.20 |
막대 그래프에서 사용되지 않는 수준 유지 (0) | 2023.07.20 |