Biểu thức chính quy để khớp với một dấu chấm


93

Bạn đang tự hỏi cách tốt nhất để kết hợp "test.this"từ "blah blah blah test.this@gmail.com blah blah"là gì? Sử dụng Python.

Tôi đã thử re.split(r"\b\w.\w@")


\wchỉ phù hợp với một nhân vật duy nhất - có thể bạn muốn\w+
Peter Boughton

2
Đây là regex xác thực email nếu bạn đang tìm kiếm.
chucksmash 21/12/12

Câu trả lời:


159

A .trong regex là một siêu ký tự, nó được sử dụng để khớp với bất kỳ ký tự nào. Để khớp với một dấu chấm theo nghĩa đen, bạn cần phải thoát khỏi nó, vì vậy\.


44

Trong regex của bạn, bạn cần phải thoát khỏi dấu chấm "\."hoặc sử dụng nó bên trong một lớp ký tự "[.]" , vì nó là một ký tự meta trong regex, khớp với bất kỳ ký tự nào.

Ngoài ra, bạn cần \w+thay vì \wđể phù hợp với một hoặc nhiều ký tự chữ.


Bây giờ, nếu bạn muốn test.thisnội dung, thì đó splitkhông phải là thứ bạn cần. splitsẽ chia chuỗi của bạn xung quanh test.this. Ví dụ:

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

Bạn có thể sử dụng re.findall:

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

2
+1 cho lớp nhân vật. Sử dụng gcovr từ tệp Jenkins và cố gắng loại trừ các thư mục dấu chấm, và Jenkins không hiểu các trình tự thoát. Lớp nhân vật hoạt động rất đẹp.
Jonathan Landrum

13

"Ở chế độ mặc định, Dấu chấm (.) Khớp với bất kỳ ký tự nào ngoại trừ một dòng mới. Nếu cờ DOTALL đã được chỉ định, điều này sẽ khớp với bất kỳ ký tự nào bao gồm một dòng mới." (python Doc)

Vì vậy, nếu bạn muốn đánh giá dấu chấm theo nghĩa đen, tôi nghĩ bạn nên đặt nó trong dấu ngoặc vuông:

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

0

để thoát các ký tự không phải chữ và số của biến chuỗi, bao gồm cả dấu chấm, bạn có thể sử dụng re.escape:

import re

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

đầu ra:

whatever\.v1\.dfc

bạn có thể sử dụng biểu thức thoát để tìm / khớp chuỗi theo nghĩa đen.


-1

Trong javascript, bạn phải sử dụng \. để khớp với một dấu chấm.

Thí dụ

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

nó yêu cầu python không JS
pl-jay

-2

Biểu thức này,

(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)

cũng có thể hoạt động OK đối với các loại chuỗi đầu vào cụ thể đó.

Bản giới thiệu

Kiểm tra

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)

Đầu ra

['test.this']

Nếu bạn muốn đơn giản hóa / sửa đổi / khám phá biểu thức, nó sẽ được giải thích ở bảng trên cùng bên phải của regex101.com . Nếu muốn, bạn cũng có thể xem trong liên kết này , nó sẽ khớp như thế nào với một số đầu vào mẫu.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.