我有一个字符串:
dkj a * & &*(&(*(
//#HELLO
^%@&UJNWDUK()C*(v 8*J DK*9
//#HE#$^&&(akls#$98akdjl ak#@sjdkja
//
%^&*(//#HELLO//#BYE<><>
//#BYE
^%@&UJNWDUK()C*(v 8*J DK*90K )
//#HELLO
&*^J$XUK 8j8 j jk kk8(&*(
//#BYE
我需要有2个组,例如每个组必须以// HELLO开头,然后应该有下一行,任何类型的文本都可以跟随(。*),但它将以// BYE开头,后面跟一个行:
1)
//#HELLO
^%@&UJNWDUK()C*(v 8*J DK*9
//#HE#$^&&(akls#$98akdjl ak#@sjdkja
//
%^&*(//#HELLO//#BYE<><>
//#BYE
2)
//#HELLO
&*^J$XUK 8j8 j jk kk8(&*(
//#BYE
并将原始字符串替换为:(基本上将//添加到每个组的每一行)
dkj a * & &*(&(*(
////#HELLO
//^%@&UJNWDUK()C*(v 8*J DK*9
////#HE#$^&&(akls#$98akdjl ak#@sjdkja
////
//%^&*(//#HELLO//#BYE<><>
////#BYE
^%@&UJNWDUK()C*(v 8*J DK*90K )
////#HELLO
//&*^J$XUK 8j8 j jk kk8(&*(
////#BYE
这是我目前的进展: 我有
\/\/#HELLO\n.*?\/\/#BYE[\n$]
但是我不确定如何进行替换,我想在//#HELLO之后使用\ G分隔每组的每一行并以//#BYE结尾
答案 0 :(得分:1)
要分组到单独的行,请使用以下正则表达式:
//#HELLO\r(.*[\n\r]+)*//#BYE\r?
\r
- 换行符[\n\r]
- 输入字符*?
- 非贪婪的比赛?
- 匹配1或0次如果总是以换行符结尾,您可以在结尾处取出?
。
然后,您可以使用该组(括号内的值)进行搜索和替换。
答案 1 :(得分:1)
这有点复杂,但这样做会:
搜索:(?m)(//#HELLO[\r\n]+|\G(?://#BYE|(?=(?:[^#]|#(?!HELLO[\r\n]+))*#BYE)[^\r\n]*[\r\n]*))
替换://$1
在Groovy中:
String resultString = subjectString.replaceAll(/(?m)(\/\/#HELLO[\r\n]+|\G(?:\/\/#BYE|(?=(?:[^#]|#(?!HELLO[\r\n]+))*#BYE)[^\r\n]*[\r\n]*))/, '//$1');