![使用正規表示式找到括號的首字母縮寫的完整形式](https://rvso.com/image/1510156/%E4%BD%BF%E7%94%A8%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F%E6%89%BE%E5%88%B0%E6%8B%AC%E8%99%9F%E7%9A%84%E9%A6%96%E5%AD%97%E6%AF%8D%E7%B8%AE%E5%AF%AB%E7%9A%84%E5%AE%8C%E6%95%B4%E5%BD%A2%E5%BC%8F.png)
我正在嘗試尋找在文本中使用括號指定的縮寫詞的完整形式。
這是一個例子:
異常的DNA 甲基化是癌症中主要的表觀遺傳改變之一,據報道在結直腸癌(CRC) 的一個子集中積累,即所謂的CpG 島甲基化表型(CIMP),已知它與微衛星不穩定性降低有關。
在這裡,我希望能夠形成一個簡短/完整形式的列表,例如:
CRC-- 大腸直腸癌
CIMP - CpG 島甲基化表型
MSI - 微型衛星降低了不穩定性
問題是我已經能夠使用 找到所有帶括號的實體re.findall('(\(.*?\))', s)
,但事實證明找到相應的完整形式很困難。
假設所有這些完整形式都在括號的左側,我想使用以下內容2捕捉括號中縮寫的完整形式的條件 -
- 字數不超過3+|SF|其中|SF|是縮寫形式的字元數(微衛星減少不穩定性 (MSI) - 這裡完整形式有 4 個單詞,而縮寫形式有 3 個字元)
- 完整形式的第一個單字以縮寫形式的第一個字元開頭(例如C大腸直腸癌(CRC))
以我目前對 的理解regex
,我還無法編寫一個regex
解決上述兩個條件並在文本中找到所有此類情況的解決方案。
您能給我一些建議嗎?
答案1
假設您正在使用 Python :
((\w)\w* )(\w* ){0,3}\((?i)(\2)[^)]*\)
此捕獲捕獲第 2 組中單字的第一個字元。所有單字均由文字空格分隔。接下來是一個開括號,後面是第 2 組中捕獲的字母,該字母不區分大小寫。所有這些都遵循括號模式的其餘部分。
我無法將字數與縮寫的字元數相匹配,因此不滿足您的條件之一。
我的評論太悲觀了。但會捕捉到很多廢話。
在 regex101.com 上測試
順便說一句,您可以調整括號模式並使用\([^)]*\)
.使用貪婪乘數的否定字元不需要反向引用,因此該過程運行得更快。