programing

점과 일치하는 정규식

linuxpc 2023. 7. 20. 21:45
반응형

점과 일치하는 정규식

가장 좋은 방법이 무엇인지 궁금했습니다."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 문자열의 정규 표현식 내부에서, 따라서 이중 백슬래시()를 사용하여 백슬래시를 탈출해야 합니다.\\), 의 총 이스케이프 시퀀스를 만듭니다..정규식에서 다음과 같이 입력합니다.\\.위의 예에 나타난 바와 같이.

레퍼런스

  1. 기본 및 공식 참조: https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
  2. [@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

반응형