我想匹配字符串一樣:如何在Python中使用正則表達式排除特定的字符串?
45 meters?
45, meters?
45?
45 ?
但不是字符串,如:
45 meters you?
45 you ?
45, and you?
在這兩種情況下的問號必須結束。所以,基本上我想排除所有包含單詞「你」的字符串。
我試過以下的正則表達式:
'\d+.*(?!you)\?$'
但第二種情況(可能是因爲.*
)
我想匹配字符串一樣:如何在Python中使用正則表達式排除特定的字符串?
45 meters?
45, meters?
45?
45 ?
但不是字符串,如:
45 meters you?
45 you ?
45, and you?
在這兩種情況下的問號必須結束。所以,基本上我想排除所有包含單詞「你」的字符串。
我試過以下的正則表達式:
'\d+.*(?!you)\?$'
但第二種情況(可能是因爲.*
)
你可以試試這個正則表達式匹配所有不具有行匹配字符串you
與?
在最後,
^(?!.*you).*\?$
說明:
在這個正則表達式中使用負向前視。它實際上意味着什麼,它檢查包含字符串you
的行。它匹配除包含字符串you
的行之外的所有行。
如果單詞是'你',OP只希望它放棄匹配。 –
您正則表達式將無法匹配'42的測試儀':http://regex101.com/r/qM1mV6 –
對不起,但我需要'.',因爲它甚至應該匹配'45米' –
有一個neat trick從一個正則表達式,您可以使用這裏排除一些比賽:
>>> import re
>>> corpus = """
... 45 meters?
... 45?
... 45 ?
... 45 meters you?
... 45 you ?
... 45, and you?
... """
>>> pattern = re.compile(r"\d+[^?]*you|(\d+[^?]*\?)")
>>> re.findall(pattern, corpus)
['45 meters?', '45?', '45 ?', '', '', '']
的缺點是,你得到空匹配時排除踢,但這些都是輕鬆過濾掉:
>>> filter(None, re.findall(pattern, corpus))
['45 meters?', '45?', '45 ?']
工作原理:
訣竅是,我們只關注捕獲的組......所以左側的變化 - \d+[^?]*you
(或「數字後跟非 - ? - 字符後跟'你')匹配你的不要想要,然後我們忘記它。只有在左側不匹配的右手邊 - (\d+[^?]*\?)
(或「數字其次是非 - ? - 字符後跟‘?’) - 相匹配,並且一個被捕獲
+1。我用同樣的方法寫了一個答案,但你速度更快。 –
不能老是you' –
它可能在任何地方,但現在我感興趣的時候,它發生在最後,謝謝。 –
我的意思是「任何地方」的意義上,在「你」和'''可能會有一些空格 –