Ekspresi reguler untuk mencocokkan titik


94

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@")


\whanya cocok dengan satu karakter - Anda mungkin ingin\w+
Peter Boughton

2
Berikut regex validasi email jika Anda mencarinya.
chucksmash

Jawaban:


162

A .di regex adalah karakter meta, digunakan untuk mencocokkan karakter apa pun. Untuk mencocokkan titik literal, Anda harus menghindarinya, jadi\.


44

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 \wuntuk mencocokkan satu atau lebih karakter kata.


Sekarang, jika Anda menginginkan test.thiskonten, maka splitbukan itu yang Anda butuhkan. splitakan 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']

2
1 untuk kelas karakter. Menggunakan gcovr dari Jenkinsfile dan mencoba mengecualikan direktori titik, dan Jenkins tidak memahami escape sequence. Kelas karakter bekerja dengan baik.
Jonathan Landrum

13

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

1

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.


-1

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]

itu meminta python bukan JS
pl-jay

-2

Ekspresi ini,

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

mungkin juga berfungsi dengan baik untuk jenis string input tertentu.

Demo

Uji

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)

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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.