我有一個包含表單中單詞的字串word1_word2, word3_word4, word5_word1(因此單詞可以出現在左側或右側)。我想要一個正則運算式來查找特定單詞的所有出現,并回傳包含它的“超級單詞”。因此,如果我正在尋找word1,我希望我的正則運算式能夠回傳word1_word2, word5_word1。由于這個詞可以出現在左邊或右邊,所以我寫了這個:
re.findall("( {}_)?[\u0061-\u007a\u00e0-\u00e1\u00e8-\u00e9\u00ec\u00ed\u00f2-\u00f3\u00f9\u00fa]*(_{} )?".format("w1", "w1"), string)
可選塊位于模式的開頭或結尾。但是,它需要永遠執行,我認為有些地方不正確,因為我嘗試洗掉可選塊并撰寫兩個單獨的正則運算式來查看開頭和結尾,它們要快得多(但我不想使用兩個正則運算式)。我錯過了什么還是正常的?
uj5u.com熱心網友回復:
這將是您的問題的正則運算式解決方案:
re.findall(rf'\b({yourWord}_\w ?|\w ?_{yourWord})\b', yourString)
uj5u.com熱心網友回復:
Python 提供了一些方法來做到這一點
a=['word1_word2', 'word3_word4', 'word5_word1']
b = [x for x in a if x.startswith("word1") or x.endswith('word1')]
print(b) # ['word1_word2', 'word5_word1']
參考鏈接
uj5u.com熱心網友回復:
s = 'word1_word2, word3_word4, word5_word1'
matches = re.finditer(r'(\w _word1)|(word1_\w )', s)
result = list(map(lambda x: x.group(), matches))
['word1_word2', 'word5_word1']
這是一種方法,但看到@Carl 他的回答,我投了他的票。這是一種更快更清潔的方法。我將把它留在這里作為許多正則運算式選項之一。
uj5u.com熱心網友回復:
這個正則運算式將為 word1 完成作業:
regex = (word\d_)*word1(_word\d)*
re.findall(regex, string)
你也可以使用這個:
re.findall(rf'\b(word{number}_\w ?|\w ?_word{number})\b', string)
uj5u.com熱心網友回復:
嘗試以下正則運算式。
在下面,替換word1為您要查找的單詞。這是假設您要查找的單詞僅包含字母數字字符。
([a-zA-Z0-9]*_word1)|(word1_.[a-zA-Z0-9]*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420832.html
標籤:
上一篇:為什么即使在圖形模式下,TensorFlow2中Float64tf.matmul的CPU性能也明顯慢于NumPymatmul?
