En iyi yolu maç için ne olduğunu merak ediyorum "test.this"dan "blah blah blah test.this@gmail.com blah blah"mı? Python kullanarak.
denedim re.split(r"\b\w.\w@")
En iyi yolu maç için ne olduğunu merak ediyorum "test.this"dan "blah blah blah test.this@gmail.com blah blah"mı? Python kullanarak.
denedim re.split(r"\b\w.\w@")
Yanıtlar:
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']
"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'
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.
Bu ifade,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
bu belirli türdeki giriş dizeleri için de iyi çalışabilir.
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']
İ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 .
\wyalnızca tek bir karakterle eşleşir - büyük olasılıkla istersiniz\w+