Этот код, кажется, делает то, что вы хотели:
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 использовать многострочное сопоставление (поэтому оно будет применять регулярное выражение к каждой строке по очереди)
- Затем мы получаем нашу первую группу
(.*)
, что означает «один или несколько символов», это будет входить в $1
при замене
- Затем существует вторая группа
(obj.+)
, поэтому она ищет строку obj
, за которой следуют один или более символов. Это войдет в $2
при замене
- и последняя часть "," ищет 2 пробела, за которыми следует запятая
Таким образом, для каждой строки, которая соответствует: some_text
, за которым следует obj
, за которым следует некоторый текст, за которым следуют 2 пробела и запятая, эта строка будет заменена на:
$1"$2",
где $1
- группа .*
, а $ 2 - группа (obj.*)
Надеюсь, это объясняет это: -)