【发布时间】:2020-01-20 19:04:58
【问题描述】:
假设我有一个字符串:
公共类 MyClass : BaseClass
我想用“MyNewClass”之类的任意替换来替换“MyClass”
我可以用这样的正则表达式来做到这一点:
Regex.Replace(fileOrigContents, $@"([^\p{{L}}0-9\.]){oldClassName}([^\p{{L}}0-9:])", $"$1{newClassName}$2$3");
但这并不包括字符串可能是的情况
公共类 MyClass: BaseClass
或
公共类 MyClass:BaseClass
在这些情况下,不会发生字符串替换。
对于第二种情况,我能够通过此修改使其工作:
Regex.Replace(fileOrigContents, $@"([^\p{{L}}0-9\.]){oldClassName}(\s*:\s*[^\p{{L}}0-9:])", $"$1{newClassName}$2");
但这不适用于第三种情况。如何使用正则表达式替换类名并覆盖空格和 ':' 的任意组合?
【问题讨论】:
-
我希望您的“修改”适用于分号前后的任何空格组合。所以不清楚你的问题是什么。您需要提供一个良好的minimal reproducible example,以准确说明“不起作用” 的含义。
-
明确一点:您的正则表达式有两个捕获组,但您的替换模式有三个 plecholder,
$1、$2和$3- 为什么?还是您发布的模式不是您实际使用的模式? -
另外,您提到的两种情况都不起作用,因为您最后一个捕获组模式匹配除字母、数字和冒号之外的任何字符。如果您删除它,它们将得到匹配,请参阅this regex demo。