Bertanya-tanya apa cara terbaik adalah untuk mencocokkan "test.this"
dari "blah blah blah test.this@gmail.com blah blah"
is? Menggunakan Python.
Saya sudah mencoba re.split(r"\b\w.\w@")
Bertanya-tanya apa cara terbaik adalah untuk mencocokkan "test.this"
dari "blah blah blah test.this@gmail.com blah blah"
is? Menggunakan Python.
Saya sudah mencoba re.split(r"\b\w.\w@")
Jawaban:
Di regex Anda, Anda harus keluar dari titik "\."
atau menggunakannya di dalam kelas karakter "[.]"
, karena ini adalah karakter meta dalam ekspresi reguler, yang cocok dengan karakter apa pun.
Juga, Anda perlu \w+
bukan \w
untuk mencocokkan satu atau lebih karakter kata.
Sekarang, jika Anda menginginkan test.this
konten, maka split
bukan itu yang Anda butuhkan. split
akan memisahkan string Anda di sekitar test.this
. Sebagai contoh:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
Anda dapat menggunakan re.findall
:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"Dalam mode default, Titik (.) Cocok dengan karakter apa pun kecuali baris baru. Jika bendera DOTALL telah ditentukan, ini cocok dengan semua karakter termasuk baris baru." (Dok python)
Jadi, jika Anda ingin mengevaluasi titik literaly, saya rasa Anda harus memasukkannya ke dalam tanda kurung siku:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
untuk keluar dari karakter non-alfanumerik dari variabel string, termasuk titik, Anda dapat menggunakan re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
keluaran:
whatever\.v1\.dfc
Anda dapat menggunakan ekspresi lolos untuk menemukan / mencocokkan string secara harfiah.
Ekspresi ini,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
mungkin juga berfungsi dengan baik untuk jenis string input tertentu.
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']
Jika Anda ingin menyederhanakan / memodifikasi / menjelajahi ekspresi, itu telah dijelaskan di panel kanan atas regex101.com . Jika mau, Anda juga dapat melihat di tautan ini , bagaimana kecocokannya dengan beberapa masukan sampel.
\w
hanya cocok dengan satu karakter - Anda mungkin ingin\w+