Java正则表达式:替换A和Z之间的任何B
假设此输入字符串:Java正则表达式:替换A和Z之间的任何B,java,regex,Java,Regex,假设此输入字符串: A-B-C-B-Z 我正在尝试替换A和Z之间的任何B 以下正则表达式仅与上次出现的B匹配: (.*A.*)B(.*Z.*) …将(Pattern.replaceAll())替换为$1-$2时,结果是 A-B-C---Z 预期结果将是 A---C---Z 相反 谢谢你的帮助 在Java中,您可以像这样使用Lookaround: String str = "F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C"; String repl = str.repl
A-B-C-B-Z
我正在尝试替换A
和Z
之间的任何B
以下正则表达式仅与上次出现的B
匹配:
(.*A.*)B(.*Z.*)
…将(Pattern.replaceAll()
)替换为$1-$2
时,结果是
A-B-C---Z
预期结果将是
A---C---Z
相反
谢谢你的帮助 在Java中,您可以像这样使用Lookaround:
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 str=“F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C”;
字符串repl=str.replaceAll(“(?你必须遵循迭代的方法。@RohitJain你的意思是真正的迭代、缓冲、状态记忆和直接用Java代码替换,对吗?谢谢@anubhava。看起来很有希望,但在同一字符串内的多个A..B..Z
序列中失败,例如F-B-P-B-A-B-C-B-Z-D-B-A-B-B-C-C
转换为F-B-P-B-A--C)---Z-D--A--C--Z-C
而它应该是F-B-P-B-A--C--Z-D-B-A--C--Z-C
。当找到Z时,我可以在后面停下来吗?请注意,我当然没有真正使用A
、B
和Z
。我真正做的是在替换&CDATA(B
)部分中的(A
)和]>
(=Z
)…我建议您提供一些类似问题的示例,以便我可以向您推荐更好的正则表达式解决方案。我已更新了有关问题的答案,并尝试猜测您在评论中添加的问题的正则表达式。检查更新的正则表达式。非常感谢,现在可以完美地工作了!…承认我不知道这是如何工作的/我的想法是什么实现想法。阅读所用概念的一些提示将是完美的++。另一件事:{0999}
对性能有什么影响?我的字符串可能更长。你认为{010000000}
将使性能为零?将上面的?=
更改为?!
,但请不要从评论中添加新问题,因为不鼓励这样做。最好创建新问题。
String repl = str.replaceAll(
"(?<=<!\\[CDATA\\[.{0,999})&(?=((?!<!\\[CDATA\\[|\\]\\]>).)*\\]\\]>)", "-");