簡體   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