正则表达式 - 在替换字符之间添加空格

时间:2017-06-18 22:37:25

标签: c# regex

我有一个正则表达式@"\bAND\b|\bOR\b|""|\(|\)",用于删除字符串中的某些单词或字符。我遇到的问题是如果使用以下文本:

耳罩式耳机"耳塞式耳机

当我使用regex.replace时,正则表达式成功地排除了' OR'但这两个查询将被混合在一起

耳罩式耳机

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

3 个答案:

答案 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