Bertanya-tanya apa cara terbaik adalah untuk mencocokkan "test.this"
dari "blah blah blah [email protected] 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 [email protected] blah blah"
is? Menggunakan Python.
Saya sudah mencoba re.split(r"\b\w.\w@")
\w
hanya cocok dengan satu karakter - Anda mungkin ingin\w+
Jawaban:
A
.
di regex adalah karakter meta, digunakan untuk mencocokkan karakter apa pun. Untuk mencocokkan titik literal, Anda harus menghindarinya, jadi\.
sumber
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, makasplit
bukan itu yang Anda butuhkan.split
akan memisahkan string Anda di sekitartest.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']
sumber
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 [email protected] blah blah") >>> resp.group() 'test.this'
sumber
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:
Anda dapat menggunakan ekspresi lolos untuk menemukan / mencocokkan string secara harfiah.
sumber
Dalam javascript Anda harus menggunakan \. untuk mencocokkan titik.
Contoh
"blah.tests.zibri.org".match('test\\..*') null
dan
"blah.test.zibri.org".match('test\\..*') ["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]
sumber
Ekspresi ini,
mungkin juga berfungsi dengan baik untuk jenis string input tertentu.
Demo
Uji
import re expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)' string = ''' blah blah blah [email protected] blah blah blah blah blah test.this @gmail.com blah blah blah blah blah [email protected] blah blah ''' matches = re.findall(expression, string) print(matches)
Keluaran
['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.
sumber