C# regexp-替换其他文本之外的文本
我正在编辑一些C代码,需要将nameof(somevar)等表达式更改为“somevar”。使用regexp是否可行 下面是一个更好的例子: 我所拥有的:C# regexp-替换其他文本之外的文本,c#,regex,C#,Regex,我正在编辑一些C代码,需要将nameof(somevar)等表达式更改为“somevar”。使用regexp是否可行 下面是一个更好的例子: 我所拥有的: throw new ArgumentException(nameof(outputFilePath)); 我需要的是: throw new ArgumentException("outputFilePath"); 替换regexp: nameof\(([^)]*)\) 作者: 这应该做到: string s = "nameof(
throw new ArgumentException(nameof(outputFilePath));
我需要的是:
throw new ArgumentException("outputFilePath");
替换regexp:
nameof\(([^)]*)\)
作者:
这应该做到:
string s = "nameof(abc)";
Regex r = new Regex("nameof\\((.+?)\\)");
string output = r.Replace(s, "\"$1\"");
搜索左括号\(
创建一个组(即(.+?)
),该组将搜索任何字符($1
)一次或多次(
),并以惰性方式(+
)?
搜索右括号\)
nameof
的目的正是为了确保由nameof
生成的字符串实际上与给定的成员/变量名相匹配,而不是有一个字符串意外地包含错误/拼写错误/旧的成员名……我需要这个用于powershell脚本,它不支持版本6+功能。哦,我懂了。那么,当然没有办法移除这个操作符…:-(我用VS代码替换它,不知怎么的,它找不到任何“nameof\(.+?)\”。我用了@seduardo解决方案,但是没有$seduardo就不行,正如你提到的,所以我对你的答案投了赞成票)@MikeTwc-Huh…不确定为什么不行,但我很高兴seduardo的回答是正确的。这个例子是在您请求替换放置此参数时使用notepad++或其他编辑器。但是使用javascript可以直接使用:“抛出新ArgumentException(nameof(outputFilePath));”。替换(/nameof(([^)]*)/,“\$1\”)
string s = "nameof(abc)";
Regex r = new Regex("nameof\\((.+?)\\)");
string output = r.Replace(s, "\"$1\"");