我需要将“x y z word1 word2”替换为“x_y_z word1 word2”
单个字符的数量可能会有所不同。
答案 0 :(得分:5)
Regex.Replace(yourstring, "^x y z ", "x_y_z ")
当然,会这样做。您想要概括多少取决于您要替换的“符号后跟空格”(假设您不想在示例字符串中替换word1
以后);例如,如果要在字符串的开头准确替换三个单字符标识符(后跟空格),则适当的推广是:
Regex.Replace(yourstring, "^([a-z]) ([a-z]) ([a-z]) ", "$1_$2_$3 ")
但如果您想要替换不同数量的标识符或不同长度的标识符等,则会有所不同。请告诉我们您要更换的内容(以及您想要停止更换的位置),我们可以更具体地说明我们的建议。
答案 1 :(得分:5)
你可以通过滥用lookahed来实现这一点:
Regex.Replace(str, @"(?<=^\w?(\s\w)*)\s(?=\w\s)", "_");
查找一系列空格和单个字母之后的空格,以及另一个此类字母之前的空格。请注意,这不适用于所有正则表达式,但.net处理得很好。
另一种选择是使用MatchEvaluator:
Regex.Replace(str, @"^(\w )+",
match => match.Value.TrimEnd().Replace(' ', '_') + " ");
在这个版本中,正则表达式很简单,但我们会进行一些后期处理 - 函数会删除最后一个空格,并用下划线替换所有其他空格。