Peter
Rick
09887
1234
现在,它将以r / R开头的每个单词替换为空白,但是我想将所有以r / R开头的单词除外的所有空格都替换为空白。
答案 0 :(得分:3)
修改
您似乎想要的只是提取以r
或R
开头的单词,并在它们之间加一个空格。在这种情况下,仅使用\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 #1和regex demo #2。
如果要删除限定词之前和之后的所有非词字符,请使用
var result = Regex.Replace(line, @"\W*\b(?![rR])\w+\W*", " ").Trim();
它将删除所有以r
和R
开头的单词之前和之后的所有非单词字符。
详细信息
\b
-单词边界(?![rR])
-如果在当前位置的右侧紧邻有r
或R
\w+
-1个以上的字符字符\W*
-0+个非单词字符。