Java 正则表达式 : replace any B between A and Z

标签 java regex

假设输入字符串:

A-B-C-B-Z

我正在尝试替换 AZ 之间的任何 B

以下正则表达式仅匹配最后一次出现的 B:

(.*A.*)B(.*Z.*)

...用 $1-$2 替换 (Pattern.replaceAll()) 时,结果为

A-B-C---Z

预期结果是

A---C---Z

相反。

感谢您的帮助!

最佳答案

在 Java 中,您可以使用如下所示的环视:

String str = "F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C";
String repl = str.replaceAll("(?<=A.{0,999})B(?=((?!A|Z).)*Z)", "-");
//=> F-B-P-B-A---C---Z-D-B-A---C---Z-C

根据您的评论,您可以使用此正则表达式:

String repl = str.replaceAll(
  "(?<=<!\\[CDATA\\[.{0,999})&amp;(?=((?!<!\\[CDATA\\[|\\]\\]>).)*\\]\\]>)", "-");

需要注意的是,这是假设您的输入长度最多为 999。

关于Java 正则表达式 : replace any B between A and Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791957/

相关文章:

java - : Pattern pattern = Pattern. 编译 ("\\"出了什么问题);

html - HTML 中 URL 的正则表达式匹配

regex - 在 bash 中提取一段字符串?

python正则表达式,空格之间只有数字

java - 如何在 Android 中使用 WordPress 的 WTI Like Post?

java - 门面实现中的 ConcurrentModificationException

java - URL 的 Tomcat HTTP 500 错误

java - 有多少个文件读取器可以同时读取同一个文件?

javascript - 有没有一种优雅的方法从这个数组 ["{ test1, test2 }", "test3", "{test4, test5}"] 中提取单词,并将它们放在一个数组中?

java - 在 findViewById(R.id.myListView) 上找不到符号