使用内联正则表达式在Groovy中交换字符串字段值?

时间:2013-09-06 11:43:47

标签: regex string groovy replace

我有一个POJO:

public class Dog {
    String uuid;

    // ...etc.
}

我想编写一个简单的Groovy表达式,用其他字符/字符串替换uuid字符串字段中某些字符的实例,具体来说:

  • 将“@”的实例替换为“elbow
  • 使用单引号(“"”)替换双引号“'”的实例
  • 将“%”的实例替换为“shoulder

我知道Groovy会是这样的:

myDog.getUUID().replaceAll("[@|\"|%]+", ???);

但是我无法弄清楚如何做所有3个内联,以及它们的实际正则值应该是什么。

如果可能的话,我希望它是一个replace命令,而不是3个单独的命令,但如果单个命令不可能,我将进行3次单独替换。提前谢谢!

3 个答案:

答案 0 :(得分:2)

您可以将replace方法链接在一起

uuid = uuid.replace("@", "elbow").replace("\"", "'").replace("%", "shoulder");

答案 1 :(得分:2)

使用map +正则表达式:

subs = [
    '@': 'elbow',
    '"': "'",
    '%': 'shoulder'
]
uuid = 'a @ b % c " d';
uuid.replaceAll(/[@"%]/, { subs[it[0]] })
// ===> a elbow b shoulder c ' d

注意

  • |内不需要[]。如果存在,|也匹配。

答案 2 :(得分:1)

你不必使用正则表达式:do:

string str = dog.uuid.replace("@", "elbow");
str = str.replace("%", "shoulder");
str = str.replace("%", "shoulder");
str = str.replace("\"", "\'");
dog.uuid = str;

我们使用格式"\"",因此编译器不会在字符串中的quates和字符串的边界之间混淆