如何使用正则表达式替换某些模式之间的空白
How to substitute blanks between certain patterns using regex
我想替换 $#
和结尾 #
之间的空格。
测试字符串:
This is my variable A $#testpattern 1# and this is variable B $#testpattern 2 with multiple blanks#
预期结果:
This is my variable A $#testpattern1# and this is variable B $#testpattern2withmultipleblanks#
当它只有一个空白时,我可以使用它,但是当有多个空白时,它就不起作用了。
当前正则表达式:
/(?<=$#)(\w*?)(\s*?)(\w*?)(?=#)
这是一种方法。
\$#(.*?)#
- 捕获分隔符之间的字符串
- 找到模式中的每个捕获组。
- 删除该组中的空白。
- 然后在原始字符串中,将捕获的字符串替换为修改后的字符串。
String s = "This is my variable A $#testpattern 1# and this is variable B $#testpattern 2 with multiple blanks#";
Pattern p = Pattern.compile("\$#(.*?)#");
Matcher m =p.matcher(s);
while (m.find()) {
String str = m.group(1).replace(" ","");
s = s.replace(m.group(1),str);
}
System.out.println(s);
打印
This is my variable A $#testpattern1# and this is variable B $#testpattern2withmultipleblanks#
Java 支持 lookbehind 断言中的有限量词,因此您可以向其添加可选的单词字符或空格 [\w\s]{0,100}
而对于 lookahead,您只能添加 [\w\s]*
匹配 1或中间有更多空白字符。
(?<=$#[\w\s]{0,100})\s+(?=[\w\s]*#)
例如
String string = "This is my variable A $#testpattern 1# and this is variable B $#testpattern 2 with multiple blanks#";
System.out.println(string.replaceAll("(?<=\$#[\w\s]{0,100})\s+(?=[\w\s]*#)", ""));
输出
This is my variable A $#testpattern1# and this is variable B $#testpattern2withmultipleblanks#
看到一个Java demo and a Regex demo。
我想替换 $#
和结尾 #
之间的空格。
测试字符串:
This is my variable A $#testpattern 1# and this is variable B $#testpattern 2 with multiple blanks#
预期结果:
This is my variable A $#testpattern1# and this is variable B $#testpattern2withmultipleblanks#
当它只有一个空白时,我可以使用它,但是当有多个空白时,它就不起作用了。
当前正则表达式:
/(?<=$#)(\w*?)(\s*?)(\w*?)(?=#)
这是一种方法。
\$#(.*?)#
- 捕获分隔符之间的字符串- 找到模式中的每个捕获组。
- 删除该组中的空白。
- 然后在原始字符串中,将捕获的字符串替换为修改后的字符串。
String s = "This is my variable A $#testpattern 1# and this is variable B $#testpattern 2 with multiple blanks#";
Pattern p = Pattern.compile("\$#(.*?)#");
Matcher m =p.matcher(s);
while (m.find()) {
String str = m.group(1).replace(" ","");
s = s.replace(m.group(1),str);
}
System.out.println(s);
打印
This is my variable A $#testpattern1# and this is variable B $#testpattern2withmultipleblanks#
Java 支持 lookbehind 断言中的有限量词,因此您可以向其添加可选的单词字符或空格 [\w\s]{0,100}
而对于 lookahead,您只能添加 [\w\s]*
匹配 1或中间有更多空白字符。
(?<=$#[\w\s]{0,100})\s+(?=[\w\s]*#)
例如
String string = "This is my variable A $#testpattern 1# and this is variable B $#testpattern 2 with multiple blanks#";
System.out.println(string.replaceAll("(?<=\$#[\w\s]{0,100})\s+(?=[\w\s]*#)", ""));
输出
This is my variable A $#testpattern1# and this is variable B $#testpattern2withmultipleblanks#
看到一个Java demo and a Regex demo。