簡體   English   中英

使用正則表達式查找縮寫

[英]Using regex to find abbreviations

我正在嘗試創建一個正則表達式,該表達式將識別 Python 中給定字符串中可能的縮寫。我對 RegEx 有點陌生,雖然我相信它應該有點簡單,但我在創建表達式時遇到了困難。 該表達式應選擇具有兩個或更多大寫字母的單詞。 該表達式還應該能夠拾取中間使用破折號的單詞並報告整個單詞(破折號前后)。 如果數字也存在,他們也應該用這個詞來報告。

因此,它應該拿起:

ABC、AbC、ABc、A-ABC、a-ABC、ABC-a、ABC123、ABC-123、123-ABC。

我已經做了以下表達: r'\b(?:[az]*[AZ\-][az\d[^\]*]*){2,}'

然而,這也確實會出現這些錯誤的詞:

A-BC, abc

我認為問題在於它尋找多個大寫字母破折號。 我希望它只給我至少有兩個或更多大寫字母的單詞。 我知道它也會“錯誤地”將單詞視為“Abc-Abc”,但我認為沒有辦法避免這些。

如果支持前瞻並且您不想匹配雙精度--您可以使用:

\b(?=(?:[a-z\d-]*[A-Z]){2})[A-Za-z\d]+(?:-[A-Za-z\d]+)*\b

解釋

  • \b單詞邊界
  • (?= Positive lookahead,斷言從當前位置到右邊是
    • (?:[az\d-]*[AZ]){2}匹配 2 倍可選的允許字符和大寫字符 AZ
  • )關閉前瞻
  • [A-Za-z\d]+匹配 1+ 次不帶連字符的允許字符
  • (?:-[A-Za-z\d]+)*可選擇重復-和 1+ 次允許的字符
  • \b單詞邊界

請參閱regex101 演示

要在字符周圍有連字符時也不匹配,您可以使用否定環視斷言左側或右側沒有連字符。

\b(?<!-)(?=(?:[a-z\d-]*[A-Z]){2})[A-Za-z\d]+(?:-[A-Za-z\d]+)*\b(?!-)

請參閱另一個正則表達式演示

暫無
暫無

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

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