Bunun gibi düzenli bir ifadem var:
regexp = u'ba[r|z|d]'
Sözcük bar , baz veya kötü içeriyorsa işlev True döndürmelidir . Kısacası, Python'un
'any-string' in 'text'
Bunu nasıl anlayabilirim? Teşekkürler!
Bunun gibi düzenli bir ifadem var:
regexp = u'ba[r|z|d]'
Sözcük bar , baz veya kötü içeriyorsa işlev True döndürmelidir . Kısacası, Python'un
'any-string' in 'text'
Bunu nasıl anlayabilirim? Teşekkürler!
Yanıtlar:
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
xyz) aramak istediğim ve bunu yapmanın daha etkili bir yolunun hangisi olduğunu bilmek istediğim benzer bir durum üzerinde çalışıyorum, python'u 'xyz' in given_textkullanmalı re.compile(r'xyz').search(given_text)mıyım yoksa kullanmalı mıyım?
[]re de eşleşecek şekilde parantez, bir karakter sınıfını içerir: >>> kelime = 'ba |'; regexp.search (word) <_sre.SRE_Match nesnesi 0x101030b28>. Tüm boru sembollerini bırakabilirsiniz.
Şimdiye kadar en iyisi
bool(re.search('ba[rzd]', 'foobarrrr'))
True döndürür
bool. OP: " Truekelime bar, baz veya kötü içeriyorsa dönmelidir ." Diğer yanıtlar şu davranışı kullanır if- ifadeyi otomatik olarak sağa çevirerek a bool. örneğin import re; rgx=re.compile(r'ba[rzd]'); rgx.search('foobar')=> <re.Match object; span=(2, 5), match='bar'>, ama if(rgx.search(w)): print('y')=> y.
Matchnesneler her zaman doğrudur ve Noneeşleşme yoksa döndürülür. Sadece doğruluğu test edin.
Kod:
>>> st = 'bar'
>>> m = re.match(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
...
'bar'
Çıktı = bar
searchİşlevsellik istiyorsanız
>>> st = "bar"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m is not None:
... m.group(0)
...
'bar'
ve eğer regexpbulunmazsa
>>> st = "hello"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
... else:
... print "no match"
...
no match
@Bukzor'un belirttiği gibi, eğer st = foo barthan match çalışmazsa. Bu yüzden kullanımı daha uygun re.search.
searchdaha çok istiyor match. (Bkz. Docs.python.org/library/re.html#matching-vs-searching. ) Ayrıca, gerçek olası argümanları sadece yerine doğru sırada göstermenizin faydalı olacağını düşünüyorum ....
stiçin "foo bar", maç yöntemi burada çalışmaz. Aramak istiyorsun.
inve ile alt dizeyi aramadaki karmaşıklık farkı regexnedir?
İşte istediğinizi yapan bir işlev:
import re
def is_match(regex, text):
pattern = re.compile(regex, text)
return pattern.search(text) is not None
Normal ifade arama yöntemi, başarılı olduğunda bir nesne ve dizede bulunamazsa Yok döndürür. Bunu akılda tutarak, arama bize bir şey verdiği sürece True döndürüyoruz.
Örnekler:
>>> is_match('ba[rzd]', 'foobar')
True
>>> is_match('ba[zrd]', 'foobaz')
True
>>> is_match('ba[zrd]', 'foobad')
True
>>> is_match('ba[zrd]', 'foobam')
False
Bunun gibi bir şey yapabilirsiniz:
Aramayı kullanmak, arama dizenizle eşleşirse bir SRE_match nesnesi döndürür.
>>> import re
>>> m = re.search(u'ba[r|z|d]', 'bar')
>>> m
<_sre.SRE_Match object at 0x02027288>
>>> m.group()
'bar'
>>> n = re.search(u'ba[r|z|d]', 'bas')
>>> n.group()
Değilse, Hiçbiri döndürür
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
n.group()
AttributeError: 'NoneType' object has no attribute 'group'
Ve tekrar göstermek için yazdırmak için:
>>> print n
None
bool(re.search('ba[rzd]', 'sometext')).