[英]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-linear
或pre-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.