我有一个字符串,其中包含以下格式的其他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方法实现此目的?
答案 0 :(得分: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部分;
(?m)
告诉groovy使用多行匹配(因此它会依次将regexp应用于每一行)(.*)
,意思是“一个或多个字符”,这将替换为$1
(obj.+)
,因此它会查找字符串obj
,后跟一个或多个字符。这将在替换<{li>中进入$2
因此,对于匹配的每一行:some_text
后跟obj
后跟一些文字后跟2个空格和逗号,它将用以下内容替换整行:
$1"$2",
其中$1
是.*
组,$ 2是(obj.*)
组
希望这能解释它: - )