Regex notepad++正则表达式替换匹配文本的内部序列

Regex notepad++正则表达式替换匹配文本的内部序列,regex,notepad++,Regex,Notepad++,如何将castnet_price的所有文档替换为小数9,2=xxx,并替换为ROUNDnet_price,2=xxx,同时在记事本++中保留xxx?这些语句与其他AND语句嵌套,如下所示: 记事本++需要哪些查找和替换参数 示例文本: OR (cast(net_price as decimal(9,2))=@var2 AND cost=@var3 AND blah) 示例结果: OR (ROUND(net_price,2)=@var2 AND cost=@var3 AND blah) 每次我

如何将castnet_price的所有文档替换为小数9,2=xxx,并替换为ROUNDnet_price,2=xxx,同时在记事本++中保留xxx?这些语句与其他AND语句嵌套,如下所示:

记事本++需要哪些查找和替换参数

示例文本:

OR (cast(net_price as decimal(9,2))=@var2 AND cost=@var3 AND blah)
示例结果:

OR (ROUND(net_price,2)=@var2 AND cost=@var3 AND blah)
每次我尝试编写自己的正则表达式时,它似乎会选择从净价到最后一行的整行,我希望它选择第一行和之后的净价,然后继续到下一行

我原以为净价会和任何东西的净价相匹配,直到它找到了,并且。很明显我错了,如果有人能解释为什么我会很感激

Ctrl+H 查找内容:将\net\u价格转换为十进制\9,2\\?==@var2和 替换为:轮\$1,2\ 检查环绕 检查正则表达式 全部替换 说明:

替换:

之前的屏幕截图:

之后的屏幕截图:


为这个过于简单的问题道歉我对它进行了编辑,以反映真正更复杂的问题。张贴答案,希望回馈

我应该指出,样本数据可以是小数9,2或浮点,甚至小数9,4。因此,这比仅仅搜索和替换要复杂得多。很抱歉,我试图简化我的帖子,因为我把它简化了

原来正确的注册表不是。*因为这是贪婪匹配,我需要使用。*?仅匹配净价后的第一个和声明。因为贪婪匹配将匹配到最后一个模式,所以它可以找到,然后向后看以匹配最后一个和第二个模式。这会选择太多的线路-这就是我的问题所在

因此正则表达式变成:cast\net\u price.*?\=.*?和 其中:

将净价格(始终在第1组中)和变量/数量(始终在第2组中)分为两组,其他所有内容都将被重写:

替换为:四舍五入\$1,2\=$2和

它用净价替换$1捕获组1,用价值替换$2捕获组2

记事本++搜索和替换窗口:

你为什么提到.NET?记事本++正则表达式引擎是Boost。@davec:好的,但我似乎很清楚,根据你的问题,这就是你想要的。您应该编辑您的问题并添加更多的测试用例,包括必须更改的示例和其他一些。您完全正确。很抱歉,我过于简化了示例!我对你的答案投了赞成票。@Tote我接受你的答案:你肯定回答了所问的问题。对不起,我说得太糟糕了。它来自一个非常大的测试脚本,该脚本可以转换为10,2 10,4,并在整个该死的地方浮动。实际上,它应该只四舍五入小数点后2位。再次感谢,很抱歉给您带来混乱。我也会留下我的答案,因为它扩展了原文并回答了这两个问题,可能会帮助其他灵魂。
cast\(                  # literally
(net_price)             # group 1, "net_price"
as decimal\(9,2\)\)     # literally
(?==@var2 AND)          # positive lookahead, make sure we have "=@var2 AND" after
ROUND\($1,2\)
finds cast( 
finds net_price and puts it into capture group 1
non greedy scans until it finds an equals character
captures non greedily the value into group 2
finds the AND