繁体   English   中英

如何用单个子字符串替换连续出现的子字符串?

[英]How to replace a continuous occurrence of a substring with a single substring?

我在android froom中解析了一个html字符串,该字符串是可跨越的字符串。 :-

<p dir="ltr"><b><b><b><b><b>qwert</b></b></b></b></b><b><b><b><b><b><b>y</b></b></b></b></b></b></p>

如您所见,标签多次出现。

现在,我完成了hit和trial,用户方法如replaceAll() ,但是它们替换了所有出现的情况。

我想要的是,当我传递一个子字符串来查找时,说“ <b> ”,然后它应该替换并说上述字符串中的前五个连续的加粗标签,并用单个“ <b> ”标签。

有什么建议么

所需结果:- <p dir="ltr"><b>qwert</b><b>y</b></p>

如果我正确理解了您的问题,则可以尝试使用此正则表达式:

(<[^>]+>)\\1+

并替换为:

\\1

在代码中...

String test = "<p dir=\"ltr\"><b><b><b><b><b>qwert</b></b></b></b></b><b><b><b><b><b><b>y</b></b></b></b></b></b></p>";
String out = test.replaceAll("(<[^>]+>)\\1+", "$1");

输出:

<p dir="ltr"><b>qwert</b><b>y</b></p>

(<[^>]+>)匹配并捕获到组1中,这是它找到的第一个标签。

正则表达式中的\\\\1表示第一个捕获的标签。 +表示无限重复(嗯,这个限制是一个很大的数字,我认为您不必担心)。

替换$1然后也引用第一个捕获的标签。

ideone演示

你想要这样的东西

找到: (<b>)\\1+|(<\\/b>)\\2+

替换: \\1\\2

演示在这里: http : //regex101.com/r/aC6iP4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM