[英]Regex for matching exact words that contain apostrophes in Python?
出於本項目的目的,我使用了更精確的正則表達式,而不是更通用的表達式。 我正在計算一個名為 I import 的文本文件中的單詞列表中的單詞出現次數,我將其導入名為 vocabWords 的腳本,其中列表中的每個單詞的格式為\\bword\\b
。
當我運行我的腳本時, \\bwhat\\b
會選擇單詞“what”和“what's”,但\\bwhat's\\b
不會選擇單詞。 如果我切換順序使撇號詞在詞根詞之前,則詞數正確。 如何更改我的正則表達式列表以便正確計算單詞? 我知道問題是使用“\\b”,但我一直找不到如何解決這個問題。 我不能有更通用的正則表達式,我必須在正則表達式模式中包含單詞本身。
詞條:
\bwhat\b
\bwhat's\b
\biron\b
\biron's\b
我的代碼:
matched = []
regex_all = re.compile('|'.join(vocabWords))
for row in df['test']:
matched.append(re.findall(regex_all, row))
如果在將單詞表轉換為正則表達式之前按長度對其進行排序,則較長的單詞(如“what's”)將位於較短的單詞(如“what”)之前。 這應該可以解決問題。
regex_all = re.compile('|'.join(sorted(vocabWords, key=len, reverse=True)))
至少還有另外兩種解決方案:
r"\\bwhat(?!')\\b"
r"\\bwhat(?:'s)?\\b"
來捕獲帶/不帶撇號的兩種變體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.