점과 일치하는 정규 표현식


답변:


163

.정규식의 A 는 메타 문자이며 모든 문자를 일치시키는 데 사용됩니다. 리터럴 점과 일치하려면 이스케이프해야합니다.\.


45

정규식 에서 점 을 이스케이프"\." 하거나 문자 클래스 내에서 사용해야합니다 "[.]". 이는 정규식의 메타 문자이므로 모든 문자와 일치합니다.

또한 하나 이상의 단어 문자와 일치하는 \w+대신 필요 \w합니다.


이제 test.this콘텐츠 를 원한다면 split필요한 것이 아닙니다. split문자열을 test.this. 예를 들면 :

>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']

다음을 사용할 수 있습니다 re.findall.

>>> re.findall(r'\w+[.]\w+(?=@)', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']

2
캐릭터 클래스의 경우 +1. Jenkinsfile에서 gcovr을 사용하고 도트 디렉토리를 제외하려고 시도했지만 Jenkins는 이스케이프 시퀀스를 이해하지 못합니다. 캐릭터 클래스는 아름답게 작동했습니다.
— Jonathan Landrum

13

"기본 모드에서 Dot (.)은 개행을 제외한 모든 문자와 일치합니다. DOTALL 플래그가 지정되어 있으면 개행을 포함한 모든 문자와 일치합니다." (파이썬 문서)

따라서 점 리터럴을 평가하려면 대괄호 안에 넣어야한다고 생각합니다.

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'

1

점을 포함하여 문자열 변수의 영숫자가 아닌 문자를 이스케이프하려면 re.escape다음을 사용할 수 있습니다 .

import re

expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)

산출:

whatever\.v1\.dfc

이스케이프 된 표현식을 사용하여 문자열을 문자 그대로 찾거나 일치시킬 수 있습니다.


0

자바 스크립트에서는 \를 사용해야합니다. 점과 일치합니다.

예

"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]

그것은 JS가 아닌 파이썬을 요구합니다
— pl-jay

-2

이 표현은

(?<=\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의 오른쪽 상단 패널에 설명되어 있습니다. 원하는 경우이 링크 에서 일부 샘플 입력과 어떻게 일치하는지 볼 수도 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.