2017-05-31 14 views
0

我需要找到索引,其中字母爲a-z的小寫字母出現在字符串中。但是,該字符串中可能包含一堆非字母字符。Python正則表達式搜索中間有非字母字符的Word

例如,單詞「dont」跨越詞組「不這樣做」中的索引[0,5]。

我四處尋找各種方法來匹配非字母字符,並用以下的正則表達式來實現這一點:

>>> import re 
>>> pattern = re.compile("d[^a-z]*o[^a-z]*n[^a-z]*t[^a-z]*") 
>>> test = "don't" 
>>> pattern.search(test).start() 
0 
>>> pattern.search(test).end() 
5 
>>> test = "d'o&&&&&n't" 
>>> pattern.search(test).start() 
0 
>>> pattern.search(test).end() 
11 
>>> 

有沒有表達這個正則表達式更簡潔的方式?或者我是否必須編寫代碼在每個我想要搜索的單詞的每個字符之間插入[^ a-z] *?

對不起,如果這個問題已經存在 - 我不知道如何說這個問題。謝謝您的幫助。

+1

你真的想在這裏實現什麼?這不是更多的'nltk'問題嗎? – Jan

回答

1

您可以匹配每個小寫字那樣,用下一個非捕獲組重複:

(?:[a-z][^a-z]*)+ 

或者,您也可以自動完成這一正則表達式爲每個給定詞:

>>> word = 'dont' 
>>> regex = ''.join(x + '[^a-z]*' for x in word) 
>>> regex 
'd[^a-z]*o[^a-z]*n[^a-z]*t[^a-z]*' 
0

嘗試這個:

pattern = re.compile("[^\w']|don't") 
1

是的,你必須按照你展示的方式來做,如果它真的是你的意圖上。

正則表達式只匹配特定字符或字符類型的後續序列。它不知道你只需要匹配d&&odo,因爲還有其他的字符必須匹配。

相關問題