正则表达式替换匹配全部而不是单个

4
我正在尝试理解正则表达式替换方法。我编写了一个函数,应该在第一个不是由大写字母前导的大写字母之前插入一个空格。
var tmpDisplay = Regex.Replace(name, "([^A-Z ])([A-Z])", "$1 $2");

当我运行这个程序时,它会替换所有不以大写字母开头的大写字母。

我查看了MSDN,似乎没有提到正则表达式替换操作在字符串上是全局的,而不仅仅匹配第一个情况。

如何只替换单个值?是否有人可以提供有关此问题的文档?


2
你需要声明一个正则表达式对象,并使用该对象实例只替换一次。 - Wiktor Stribiżew
name 的内容是什么? - Thomas Ayoub
@Thomas 这只是你的输入示例,例如“TestNameDTO”。 - johnny 5
1个回答

7

静态的Regex.Replace方法没有最大出现次数参数,但类实例有:

var rx = new Regex(@"([^A-Z ])([A-Z])");
Console.WriteLine(rx.Replace("NamePeteParker", "$1 $2", 1)); // Replace just once
                                                       ^^

请看IDEONE演示

来自MSDN:

Regex.Replace方法(字符串,MatchEvaluator,Int32)
在指定的输入字符串中,将与正则表达式模式匹配的指定最大数量的字符串替换为由MatchEvaluator委托返回的字符串。


1
谢谢,我之前很困惑为什么它能够正常工作! - johnny 5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接