C# Regex-在替换的字符之间添加空格

C# Regex-在替换的字符之间添加空格,c#,regex,C#,Regex,我有一个regex@“\bAND\b|\bOR\b|”“| \(| \)”,它从字符串中去掉某些单词或字符。我的问题是,如果使用以下文本: “入耳式”或“入耳式”耳机 当我使用regex.replace时,regex成功地串出“OR”,但这两个查询将混合在一起 耳朵式耳机 只有当我要删除的单词和其他查询词之间没有空格时,才会发生这种情况。有没有一种优雅的方法可以在我想要删除的关键字之间添加空格,如果没有的话。我知道这听起来可能很傻,但是你是否尝试过用一个空格代替它,而不是仅仅删除它?在替换文本中

我有一个regex
@“\bAND\b|\bOR\b|”“| \(| \)”
,它从字符串中去掉某些单词或字符。我的问题是,如果使用以下文本:

“入耳式”或“入耳式”耳机

当我使用regex.replace时,regex成功地串出“OR”,但这两个查询将混合在一起

耳朵式耳机


只有当我要删除的单词和其他查询词之间没有空格时,才会发生这种情况。有没有一种优雅的方法可以在我想要删除的关键字之间添加空格,如果没有的话。

我知道这听起来可能很傻,但是你是否尝试过用一个空格代替它,而不是仅仅删除它?

在替换文本中添加一个空格,然后创建一个后续的正则表达式替换,在不满足此条件时去掉2个或更多的空格

这样可以保证每个单词之间有一个空格

为了简洁起见,这是一个基本示例(没有引用
”或“
”),但概念相同:

Regex.Replace(Regex.Replace(txt, "OR", " "), @"\s\s", " ")
结果

Over ear headphones on ear headphones

这应该保留现有格式(以及预期的格式)

要使用非换行空白,请将
\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  
#

输出

"Over ear headphones"OR"on ear headphones"
Over ear headphones on ear headphones

尝试用空格替换。如果您首先匹配任何空格,比如:
Regex.replace(txt、@“或\s*”、“”),会不会更容易?这样你就不必调用Regex.Replace两次了。@JulianA把它作为一个答案放进去。:-)
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