Bir noktayla eşleşecek normal ifade


Yanıtlar:


161

Bir .regex herhangi karakteri eşleştirmek için kullanılır, meta karakterdir. Gerçek bir noktayı eşleştirmek için ondan kaçmanız gerekir.\.


44

Normal ifadenizde, herhangi bir karakterle eşleşen normal ifadede bir meta karakter olduğundan , noktadan kaçmanız"\." veya bir karakter sınıfı içinde kullanmanız gerekir "[.]".

Ayrıca, bir veya daha fazla kelime karakteriyle eşleştirmek \w+yerine ihtiyacınız vardır \w.


Şimdi, test.thisiçeriği istiyorsan, splitihtiyacın olan şey bu değil. splitdizenizi test.this. Örneğin:

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

Şunları kullanabilirsiniz re.findall:

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

2
Karakter sınıfı için +1. Gcovr'yi bir Jenkins dosyasından kullanarak ve nokta dizinleri hariç tutmaya çalışırken, Jenkins kaçış dizilerini anlamıyor. Karakter sınıfı çok güzel çalıştı.
Jonathan Landrum

13

"Varsayılan modda, Nokta (.) Satırsonu hariç herhangi bir karakterle eşleşir. DOTALL bayrağı belirtilmişse, bu, yeni satır dahil herhangi bir karakterle eşleşir." (python Doc)

Dolayısıyla, nokta gerçekliğini değerlendirmek istiyorsanız, köşeli parantez içine koymanız gerektiğini düşünüyorum:

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

0

noktalar dahil dize değişkenlerinin alfanümerik olmayan karakterlerinden kaçış yapmak için şunları kullanabilirsiniz re.escape:

import re

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

çıktı:

whatever\.v1\.dfc

dizeyi tam anlamıyla bulmak / eşleştirmek için kaçan ifadeyi kullanabilirsiniz.


-1

JavaScript'te \ kullanmanız gerekir. bir noktayı eşleştirmek için.

Misal

"blah.tests.zibri.org".match('test\\..*')
null

ve

"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]

JS değil python ister
pl-jay

-2

Bu ifade,

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

bu belirli türdeki giriş dizeleri için de iyi çalışabilir.

Demo

Ölçek

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)

Çıktı

['test.this']

İfadeyi basitleştirmek / değiştirmek / keşfetmek isterseniz, regex101.com'un sağ üst panelinde açıklanmıştır . İsterseniz, bu bağlantıdan bazı örnek girdilerle nasıl eşleşeceğini de izleyebilirsiniz .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.