And*_*ert 3 c# regex regex-replace
我正在尝试使用 C# 处理似乎使用语音转文本的文字记录。我遇到的一个主要问题是重复单词和/或短语。我很想使用正则表达式来替换它们。这里有些例子:
我我我真的很想去,但是我不去,去不了。
我真的很想使用正则表达式替换,所以它会变成这样
我真的很想去,但我去不了。
看来我有多次单词重复,无论是否有逗号。如果我尝试替换寻找特定的,它将替换 3 个中的 2 个,但保留最后两个。因此,想出一种方法来查找多个重复并用该单词的单个版本替换它们,这已经成为一种巨大的痛苦,所以如果我有 I,I,I..... 它会被替换为 I 或 II它只用一个 I 代替。
另外,如果有这样的短语:
你知道,你知道,你知道
希望能够用一个代替三个
我已经尝试过这样的:\b(\w+)\s+\1\b,但它不适用于逗号
我已经看过了,但找不到任何寻找逗号分隔的内容。如果必须多次调用我也没关系,但只是想弄清楚。
任何帮助,将不胜感激!
您可以(\b\w+(?:\s+\w+)*?)(,?\s*\1)+\b与替换字符串一起使用$1。
这里
(\b\w+(?:\s+\w+)*?)匹配一个或多个由空格符号分隔的单词:
\b\w+匹配单词开头的单词符号,(?:\s+\w+)*?多个空格符号后跟单词符号,重复任意次数(尽可能低)。(,?\s*\1)+匹配与第一组匹配的相同单词(因此\1),用可选逗号和任意数量的空格分隔,重复多次。\b确保最后的重复不会在单词中间停止。演示在这里。
警告:此正则表达式将删除所询问的任何重复内容。但有时单词的重复也是有效的。就像是We'll move, move far away。
编辑:为了适应重复之间的点,您可以使用
(\b\w+(?:\s+\w+)*?)([,.]?\s*\1)+\b
Run Code Online (Sandbox Code Playgroud)
它将匹配重复单词之间的以下分隔符:,、.、, 、. 等, 。
如果您想匹配标点符号和空格的任意组合,您可以使用
(\b\w+(?:\s+\w+)*?)([,.\s]*\1)+\b
Run Code Online (Sandbox Code Playgroud)
甚至
(\b\w+(?:\s+\w+)*?)([\p{P}\s]*\1)+\b
Run Code Online (Sandbox Code Playgroud)
第一个匹配点、逗号和空格的任意组合,例如,. , .。其次 - 例如,空格和任何标点符号的任意组合*;!? .。
演示在这里。
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |