我有很多以这种方式定义的类属性:
public string ContreMarque
{
get
{
return sContreMarque;
}
set
{
// bloc of code
}
}
我想将thoses声明的setter转换为类似示例的方法
partial void onContremarqueChanged(string value)
{
// bloc of code
}
我创建了一个正则表达式来为我做这个工作但是当有一个只有getter的公共属性时它会中断。您可以查看此链接中完成的工作:https://regex101.com/r/dN3dJ8/5
以下是链接断开时的正则表达式:
"\spublic (.+) (.+)\s+\{\s+get[\{\sa-z;\}]+set\s+\{\s+([a-z\s+=\(\);_0-9."\{\}/,!?]+)\t\t\t\}"mi
答案 0 :(得分:0)
虽然这与C#无关,但由于你使用的是python regex引擎,我可以帮助解决这个问题。
在你的原始正则表达式中,你是说get只有一个返回,但可以有任何括号:
get[\{\sa-z;\}]+)set
最简单的方法是强制括号仅在获取逻辑之外:
get\s+\{[\sa-z;]+)\s+\}\s+set
PS:但是希望使用python或Visual Studio的查找/替换? 另外,检查集合中代码括号的语法错误。
答案 1 :(得分:0)
我认为正则表达式不是最好的工具,但如果你想这样做,试试这个怪物:
[^\n]+public\s(?P<type>.+?)\s(?P<name>.+?)\n+(?P<indent>\s+)\{\s+get\s+\{\s+(?P<get>[\sa-z;\}]+?)\s*\}(?:\s+set\s+\{\s+(?P<set>[a-z\s+=\(\);_0-9."\{\}/,!?]+?)\s+\})?(?=\n(?P=indent)\})\s+\}
DEMO on your example with Python engine
但是只有保持干净的缩进才能完成这项工作!没有它它会破裂。它将匹配的相关部分放在命名组中:type
,name
,get
,set
。它还使用命名组indent
来确定它应该停止匹配的缩进级别。