簡體   English   中英

用於匹配 Python 中包含撇號的確切單詞的正則表達式?

[英]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)))

至少還有另外兩種解決方案:

  1. 測試下一個符號不是撇號r"\\bwhat(?!')\\b"
  2. 使用更通用的規則r"\\bwhat(?:'s)?\\b"來捕獲帶/不帶撇號的兩種變體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM