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@")
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@")
Câu trả lời:
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.this
nội dung, thì đó split
không phải là thứ bạn cần. split
sẽ 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']
"Ở 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'
để 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.
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ể đó.
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']
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.
\w
chỉ phù hợp với một nhân vật duy nhất - có thể bạn muốn\w+