[英]Matching repeating words in a row by regex
我想在字符串中找到一個替換重復單詞,但前提是它們彼此相鄰或由空格分隔。 例如:
"<number> <number>" -> "<number>"
"<number><number>"-> "<number>"
但不是
"<number> test <number>" -> "<number> test <number>"
我試過這個:
import re
re.sub(f"(.+)(?=\<number>+)","", label).strip()
但它會為最后一個測試選項提供錯誤的結果。
你能幫我解決這個問題嗎?
您可以使用
re.sub(r"(<number>)(?:\s*<number>)+",r"\1", label).strip()\
請參閱正則表達式演示。 詳情:
(<number>)
- 第 1 組:一個<number>
字符串(?:\s*<number>)+
- 一次或多次出現以下模式序列:
\s*
- 零個或多個空格<number>
- <number>
字符串 \1
是對 Group 1 值的替換反向引用。
import re
text = '"<number> <number>", "<number><number>", not "<number> test <number>"'
print( re.sub(r"(<number>)(?:\s*<number>)+", r'\1', text) )
# => "<number>", "<number>", not "<number> test <number>"
您可以使用
(<number>\s*){2,}
(<number>\s*)
捕獲組 1 ,匹配<number>
后跟可選字符{2,}
重復 2 次或更多次在替換使用組 1 中。
import re
strings = [
"<number> <number>",
"<number><number>",
"not <number> test <number>",
" <number> <number><number> <number> test"
]
for s in strings:
print(re.sub(r"(<number>\s*){2,}", r"\1", s))
Output
<number>
<number>
not <number> test <number>
<number> test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.