2013-04-07 24 views
15

aşağıda senaryo için doğru normal ifadeyi bulma konusunda sorun yaşıyorum:Python korursak tüm sözcük

Diyelim:

a = "this is a sample" 

Ben tüm kelimeyi eşleştirmek istediğiniz - örneğin maç için "hi" gerektiği false "hi"'dan beri bir kelime değil ve "is", True ve sol tarafta bir alfa karakteri olmadığından True döndürmelidir.

+0

Yanlış bir gönderi ile kopyalandığı için kapatıldığı için bu soruyu yeniden açtım. –

cevap

23

the docs itibaren

re.search(r'\bis\b', your_string) 

deneyin: b \

boş bir dize Maçlar, ama sadece kelimenin başında veya sonunda. re modül olarak "kelimesinin" bir naif tanımını kullanır "alfa nümerik dizisi veya alt çizgi karakterleri" "alfanümerik" yerel veya unicode seçeneklerine bağlıdır, yani

Not.

+2

Teşekkürler, flags = re.IGNORECASE – user2161049

+1

ekledim Bu, kelime için işe yaramadı "test!" The! kırıyor. – user2161049

+0

Bu ifadede ne ** r ** gerekli - yeniden arama (** r ** '\ bis \ b', your_string)? – swordholder

-4

Normal ifadedeki sorun, başka bir dizede aramak istediğiniz dizgenin normal ifadelere sahip olması durumunda karmaşık hale gelmesidir. parantezli herhangi bir dize başarısız olur.

Bu kod

word="is" 
    srchedStr="this is a sample" 
    if srchedStr.find(" "+word+" ") >=0 or \ 
     srchedStr.endswith(" "+word): 
     <do stuff> 

her tarafında bir boşluk ve ikinci bölümüyle metin için şartlı aramalarda ilk bölümü dize durumun sonunu yakalayan bir kelime bulacaksınız. re.search() belgelenmesi itibaren

>>> x="this is a sample" 
>>> y="this isis a sample." 
>>> regex=re.compile(r"\bis\b") # For ignore case: re.compile(r"\bis\b", re.IGNORECASE) 
>>> regex.findall(y) 
[] 
>>> regex.findall(x) 
['is'] 

: find

+2

Okumak zor, lütfen onu düzenleyin. – davejagoda

+1

Ayrıca, zaten kabul edilmiş bir yanıt olduğunu görüyorum - cevabınızı silmeniz ve reddetme nedeniyle itibarı kurtarmak isteyebilirsiniz. – davejagoda

+0

@davejagoda cevabı silecek onun itibarını kurtarmak? –

1

regex bu kullanarak kelime sınırı deneyin bir tamsayıyı döndürür oysa endwith boolean olduğunu unutmayın.

It matches the empty string, but only at the beginning or end of a word 

E.g. r'\bfoo\b' matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or 'foo3' 

Umut eder!

İlgili konular