[英]Python Regex Search for Word with Non-alpha Characters in the Middle
我需要找到索引,在該索引處,字符串中出現帶字母az的小寫單詞。 但是,字符串中可能包含一堆非字母字符。
例如,單詞“dont”跨越短語“do not do that”中的索引[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
>>>
是否有更簡潔的方式來表達這個正則表達式? 或者我是否必須編寫代碼以在我要搜索的每個單詞中的每個字符之間插入[^ az] *?
對不起,如果這個問題已經存在 - 我不知道如何用這個問題說出來。 謝謝您的幫助。
您可以匹配每個小寫單詞,使用非捕獲組下的重復:
(?:[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]*'
是的,如果真的是你的意圖,你必須按照你展示的方式去做。
正則表達式僅匹配特定字符或字符類型的后續序列。 它不能知道你需要將d&&o
與d
和o
匹配,因為還有其他的chars必須匹配。
嘗試這個:
pattern = re.compile("[^\w']|don't")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.