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

时间:2010-03-25 04:00:45

标签: .net regex

我需要将“x y z word1 word2”替换为“x_y_z word1 word2”
单个字符的数量可能会有所不同。

2 个答案:

答案 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(' ', '_') + " ");

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