簡體   English   中英

用於檢查捕獲組之間的子字的正則表達式

[英]Regular Expression for checking subword between capture groups

談到正則表達式,我面臨的問題是在組合單詞的開頭部分替換連字符。

例如:

wo-wo-wo-wonder -> wonder hi-hi-hi-hi -> hi wo-wo-wo -> wo fff-fight

因此,對於文本中的每個單詞,我想要替換在主要單詞( wonder )之前對主要單詞( wo-wo-wo ,還有wonder-wonder-wonder )進行部分或完全重復之前的單詞。 同時,必須不替換bi-linearpre-trained組合詞,因為在這種情況下,連字符(pre)不是主詞(train)的一部分。

我已經看到了這個解決方案[ Python發現所有出現的帶連字符的單詞並在位置上替換 ]並且顯然它可以是一個很好的解決方案。 但我的問題是完全不同的,因為我不想對連字的長度施加限制,同時我想檢查連字符是主要單詞的一部分。

這是我實際使用的正則表達式,但正如所解釋的,它並沒有解決我的全部問題。

re.sub(r'(?<!\S)(\w{1,3})(?:-\1)*-(\w+)(?!\S)', '\\2', s)

使用

r'(?<!\S)(\w+)(?:-\1)*-(\1)'

要么

r'\b(\w+)(?:-\1)*-(\1)'

請參閱正則表達式演示

細節

  • (?<!\\S) - 空白邊界(如果你使用\\b ,一個單詞邊界)
  • (\\w+) - 第1組:任何一個或多個單詞字符
  • (?:-\\1)* - 0和更多次重復-和組1值
  • - - 連字符
  • (\\1) - 第2組:與第1組相同的值。

Python示例re.sub

s = re.sub(r'(?<!\S)(\w+)(?:-\1)*-(\1)', r'\2', s)

暫無
暫無

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

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