删除所有不匹配的内容

时间:2018-11-27 10:30:27

标签: c# regex string

Peter
Rick
09887
1234

现在,它将以r / R开头的每个单词替换为空白,但是我想将所有以r / R开头的单词除外的所有空格都替换为空白。

1 个答案:

答案 0 :(得分:3)

修改

您似乎想要的只是提取rR开头的单词,并在它们之间加一个空格。在这种情况下,仅使用\b[rR]\w*正则表达式和以下代码:

var result = string.Join(" ", Regex.Matches(line, @"\b[rR]\w*").Cast<Match>().Select(x => x.Value));

请参见C# demo

原始答案

您可以在单词边界后使用negative lookahead

\b(?![rR])\w+
  ^^^^^^^^

请注意,+量词在此处更好,因为您要删除至少找到的1个字符。

或者,如果您还想删除找到的单词后的所有非单词字符,请使用

\b(?![rR])\w+\W*

请参见regex demo #1regex demo #2

如果要删除限定词之前和之后的所有非词字符,请使用

var result = Regex.Replace(line, @"\W*\b(?![rR])\w+\W*", " ").Trim();

它将删除所有以rR开头的单词之前和之后的所有非单词字符。

详细信息

  • \b-单词边界
  • (?![rR])-如果在当前位置的右侧紧邻有rR
  • ,则负向超前行为将使匹配失败
  • \w+-1个以上的字符字符
  • \W*-0+个非单词字符。