【问题标题】:Problem using groovy regular expressions使用 groovy 正则表达式的问题
【发布时间】:2011-03-30 08:47:12
【问题描述】:

我有一个字符串,其中包含以下格式的其他 groovy 文件的源代码。

def str = "def testcaseObject{
           var1: "abc"               ,
           var2:  obj.map['abc']     ,
           var3: "xyz"               ,
           var4: obj.get(0)          ,
           var5: obj.random()        ,
.......   "

在源文件中,一些属性默认是字符串,如 abc 和 xyz,而其他一些属性是函数,如 obj.map、obj.get 等。

我想让这些函数调用被视为一个字符串,即对于所有以 obj 开头的字符串,我想在 obj 之前插入双引号,并在结束行的逗号之前插入双引号。

最后我想把上面的字符串修改为

def str = "def testcaseObject{
               var1: "abc"               ,
               var2: "obj.map['abc']    ",
               var3: "xyz"               ,
               var4: "obj.get(0)        ",
               var5: "obj.random()      ",
.......       "

如何在 groovy 中使用正则表达式的简单 replaceAll 方法来实现这一点?

【问题讨论】:

    标签: groovy


    【解决方案1】:

    这段代码似乎做了你想做的事:

    def str = '''def testcaseObject{
               var1: "abc"               ,
               var2:  obj.map['abc']     ,
               var3: "xyz"               ,
               var4: obj.get(0)          ,
               var5: obj.random()        ,
    .......   '''
    
    println( str.replaceAll( /(?m)(.*)(obj.+)  ,/, '$1"$2",' ) )
    

    当它打印出来时:

    def testcaseObject{
               var1: "abc"               ,
               var2:  "obj.map['abc']   ",
               var3: "xyz"               ,
               var4: "obj.get(0)        ",
               var5: "obj.random()      ",
    .......   
    

    正则表达式的解释

    正则表达式/(?m)(.*)(obj.+) ,/分为3部分;

    1. (?m) 告诉 groovy 使用多行匹配(因此它将依次将正则表达式应用于每一行)
    2. 然后我们得到第一组(.*),意思是“一个或多个字符”,这将在替换中进入$1
    3. 然后,有第二组(obj.+),因此它会查找字符串obj,后跟一个或多个字符。这将在替换中进入$2
    4. 最后一部分“  ” 查找后跟逗号的 2 个空格

    因此,对于匹配的每一行:some_text 后跟 obj 后跟一些文本,后跟 2 个空格和一个逗号,它会将整行替换为:

    $1"$2",
    

    其中$1.* 组,$2 是(obj.*)

    希望这能解释它:-)

    【讨论】:

    • 男人!!这太棒了 !!它工作得很好。非常感谢:)你能解释一下上面语句中的逻辑吗,我听不懂:(
    • 当然,我会在答案中添加评论,并尝试解释它:-)
    • 出色的工作!!非常感谢蒂姆。你对 groovy 的把握太棒了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多