【问题标题】:Regular expression for duplicating conditions in every if statement用于在每个 if 语句中复制条件的正则表达式
【发布时间】:2019-04-19 04:49:55
【问题描述】:

我正在 Notepad++ 中编写正则表达式来复制和修改某些 if 条件。

例如:

if (variable1 == "") 应该变成

if (variable1 == "" 或 len(variable1) == 0)

我需要匹配的关键是 =="" 之前的变量名,因此我可以为 or 条件复制它们

我有以下表达:

[A-Za-z0-9()]*?\s*==\s*""

但如果在 If 和括号之间没有空格时会失败

https://regex101.com/r/Beyumi/3

我相信以下几行应该涵盖大多数情况:

If (Trim(var1) == "" And var2 == "") 
    /*Then do something*
ElseIf(var3 == "" And var4 == "" And Trim(var5)=="") Then
/*block of code*/
ElseIf var6 ==""

表达式应该可以匹配:

  1. Trim(var1) == ""

  2. var2 == ""

  3. var3 == ""

  4. var4 == ""

  5. 修剪(var5)==""

  6. var6 ==""

注意:在And语句的情况下,我可以在添加'or'条件时手动添加必要的括号

【问题讨论】:

    标签: regex


    【解决方案1】:

    你可以使用这个正则表达式,

    ((\w+|trim\(\w+\))\s*==\s*"")
    

    并用这个替换它,

    (\1 or len(\2) == 0)
    

    注意,我已启用不区分大小写的匹配,(\w+|trim\(\w+\)) 部分使用 \w+ 匹配普通变量或使用 trim\(\w+\) 匹配 trim(variablename) 并在 group2 中捕获它,其中 \s* 围绕 == 进行处理由于and 条件,可选空格和整个组被捕获在括号中,因此可以用当前表达式替换,另外还可以用or len(\2) == 0 和括号括起来以进行适当的分组。

    Regex Demo

    【讨论】:

    • 非常感谢!!到目前为止,这似乎运作良好。我没有意识到它在 == 之前总是一个修剪或实际变量,甚至在实际数据中也没有其他任何东西,从而使它过于复杂。我现在要对较大的文件进行更多测试。
    • 有一些边缘情况,例如 Array(x)=="" 或 Trim(Array(x))==""。有没有一种简单的方法来解释您发送的正则表达式中的那些?我想将它们添加为第 3 和第 4 选择
    • @Sid:很高兴它帮助了你。是的,如果您还想支持Array(x) 类型的表达式,最好再支持两个替换。但是,如果您想总体上支持此类功能,我可以为您提供更好的通用方法,因此每次您想要支持功能时,您都不必将其添加到交替中。仅支持 Array(x) 您可以使用。 Demo
    猜你喜欢
    • 2018-06-21
    • 2011-01-28
    • 1970-01-01
    • 2011-08-21
    • 2022-10-24
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多