我有一个正则表达式@"\bAND\b|\bOR\b|""|\(|\)"
,用于删除字符串中的某些单词或字符。我遇到的问题是如果使用以下文本:
耳罩式耳机"耳塞式耳机
当我使用regex.replace时,正则表达式成功地排除了' OR'但这两个查询将被混合在一起
耳罩式耳机
只有当我想要删除的单词与其他查询词之间的单词之间没有空格时,才会发生这种情况。是否有一种优雅的方法可以在我想要删除的关键字之间添加空格(如果不存在)。
答案 0 :(得分:1)
我知道这可能听起来很愚蠢,但您是否尝试用一个空格替换它而不是仅删除它?
答案 1 :(得分:0)
在替换文本中添加空格,然后创建后续正则表达式替换以在未触发此条件时去除2个或更多空格。
这样可以保证每个单词之间都有一个空格。
这是一个基本的例子(没有引用"OR"
),为了简洁,但概念是相同的:
Regex.Replace(Regex.Replace(txt, "OR", " "), @"\s\s", " ")
结果
Over ear headphones on ear headphones
答案 2 :(得分:0)
这应该保留现有的格式(以及可以预期的格式)。
要使用非换行空格,请将\s
替换为[^\s\r\n]
或类似的。
只需选择在表达式的任一侧使用单个空格,然后替换为您选择的空格。
这是在包含文字的项目上完成的。
A<sp><item>B => A<sp>B
A<sp><item>B<sp> => A<sp>B
A<item><sp>B => A<sp>B
A<item>B => A<sp>B
对于字符串开头或结尾处的项目
用空字符串替换。
这是正则表达式@"(^)?\s?(?:\b(?:AND|OR)\b|[()""])+\s?($)?"
扩展
( ^ )? # (1)
\s?
(?:
\b
(?: AND | OR )
\b
| [()"]
)+
\s?
( $ )? # (2)
C#
string sTrg = @"""Over ear headphones""OR""on ear headphones""";
Console.WriteLine("{0}", sTrg);
Regex rX = new Regex(@"(^)?\s?(?:\b(?:AND|OR)\b|[()""])+\s?($)?");
Console.WriteLine("{0}", rX.Replace(sTrg,
delegate (Match m) {
if (m.Groups[1].Success || m.Groups[2].Success)
return "";
return " ";
}));
输出
"Over ear headphones"OR"on ear headphones"
Over ear headphones on ear headphones