正则表达式.Net替换单个字符,后跟字符串开头的空格

Mic*_*Mit 2 .net regex

我需要将"xyz word1 word2"替换为"x_y_z word1 word2"
单个字符的数量可能会有所不同.

Ale*_*lli 5

Regex.Replace(yourstring, "^x y z ", "x_y_z ")
Run Code Online (Sandbox Code Playgroud)

当然会这样做的.您想要概括多少取决于您想要替换的"符号后跟空格"(假设您不想替换word1以及稍后在您的示例字符串中); 例如,如果要在字符串的开头准确替换三个单字符标识符(后跟空格),则适当的泛化是:

Regex.Replace(yourstring, "^([a-z]) ([a-z]) ([a-z]) ", "$1_$2_$3 ")
Run Code Online (Sandbox Code Playgroud)

但是如果您想要替换不同数量的标识符或不同长度的标识符等,则会有所不同.请告诉我们您想要替换的内容(以及您想要停止替换的位置),我们的建议可以更具体.


Kob*_*obi 5

你可以通过滥用lookahed来实现这一点:

Regex.Replace(str, @"(?<=^\w?(\s\w)*)\s(?=\w\s)", "_");
Run Code Online (Sandbox Code Playgroud)

查找一系列空格和单个字母之后的空格,以及另一个此类字母之前的空格.请注意,这不适用于所有正则表达式,但.net处理得很好.

另一种选择是使用MatchEvaluator:

Regex.Replace(str, @"^(\w )+",
              match => match.Value.TrimEnd().Replace(' ', '_') + " ");
Run Code Online (Sandbox Code Playgroud)

在这个版本中,正则表达式很简单,但是我们会进行一些后期处理 - 函数会删除最后一个空格,并用下划线替换所有其他空格.