您可以使用(\b\w+(?:\s+\w+)*?)(,?\s*\1)+\b
带替换字符串$1
.
Here
-
(\b\w+(?:\s+\w+)*?)
matches one or more words separated by whitespace symbols:
-
\b\w+
匹配单词开头的单词符号,
-
(?:\s+\w+)*?
多个空格符号后跟单词符号,重复任意次数(尽可能低)。
-
(,?\s*\1)+
匹配与第一组匹配的相同单词(因此\1
),由可选逗号和任意数量的空格分隔,重复多次。
-
\b
确保最后的重复不会在单词中间停止。
Demo here https://regex101.com/r/UHiEoO/6.
注意事项:此正则表达式将删除所询问的任何重复。但有时单词的重复可能是有效的。就像是We'll move, move far away
.
Edit:为了容纳重复之间的点,您可以使用
(\b\w+(?:\s+\w+)*?)([,.]?\s*\1)+\b
它将匹配重复单词之间的以下分隔符:,
, .
, ,
, .
, ,
etc.
如果您想匹配标点符号和空格的任意组合,您可以使用
(\b\w+(?:\s+\w+)*?)([,.\s]*\1)+\b
or even
(\b\w+(?:\s+\w+)*?)([\p{P}\s]*\1)+\b
例如,第一个匹配点、逗号和空格的任意组合,. , .
。其次 - 例如,空格和任何标点符号的任意组合*;!? .
.
Demo here https://regex101.com/r/UHiEoO/7.