Java:字符串替换带序号

发布于 2022-09-05 05:54:02 字数 1118 浏览 13 评论 0

原文本:

片仔癀(<span label="粉色背景" >603567</span>.SH)、
天士力(<span label="绿色背景" >600535</span>.SH)、
片仔癀(<span label="粉色背景" >603567</span>.SH)
和昆药集团(<span label="金色背景" >600422</span>.SH)等。

替换成:

片仔癀(<span label="粉色背景" ><a link="http://#link?index=1">603567</a></span>.SH)、
天士力(<span label="绿色背景" ><a link="http://#link?index=2">600535</a></span>.SH)、
片仔癀(<span label="粉色背景" ><a link="http://#link?index=3">603567</a></span>.SH)
和昆药集团(<span label="金色背景" ><a link="http://#link?index=4">600422</a></span>.SH)等。

现利用正则表达式可以替换到目标文本,就是序号那一块无法完成(无法循环)

Pattern pattern = Pattern.compile("(<span.*?label=\"(*色背景)\".*?>)(.*?)(</span>)");
Matcher matcher = pattern.matcher(str);
int i=0;
while (matcher.find()) {
    System.out.println(matcher.replaceAll(matcher.group(1) + "<a link=\"http://#link?index="+i+"\">" + matcher.group(3) + "</a>" + matcher.group(4)));
    i++;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

久隐师 2022-09-12 05:54:02

你的代码里面问题太多了

        
String str="片仔癀(<span label=\"粉色背景\" >603567</span>.SH)、"+
        "天士力(<span label=\"绿色背景\" >600535</span>.SH)、"+
        "片仔癀(<span label=\"粉色背景\" >603567</span>.SH)"+
        "和昆药集团(<span label=\"金色背景\" >600422</span>.SH)等。";

String patternStr="(<span\\s+label=\\\".色背景\\\"\\s*>)(\\d+)";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(str);
String strResult=str;
int i=0;
while (matcher.find()) {
    i++;
    String replaceTo=matcher.group(1)+
            "<a link=\"http://#link?index="+i
            +"\">"+matcher.group(2)+"</a>";
    strResult=strResult.replaceFirst(patternStr, replaceTo);
}

System.out.println(strResult);

        
        /*    输出:
片仔癀(<span label="粉色背景" ><a link="http://#link?index=1">603567</a></span>.SH)、天士力(<span label="绿色背景" ><a link="http://#link?index=2">600535</a></span>.SH)、片仔癀(<span label="粉色背景" ><a link="http://#link?
index=3">603567</a></span>.SH)和昆药集团(<span label="金色背景" ><a link="http://#link?index=4">600422</a></span>.SH)等。
         * */
        
        

还有 a 标签是不是没有结束啊

孤独岁月 2022-09-12 05:54:02

参考这个:
https://stackoverflow.com/que...

试着把replaceAll换成replaceFirst,每次只替换第一个,然后累加i

白馒头 2022-09-12 05:54:02
public static String  formatHtml(String input){
        Matcher m=Pattern.compile("[^><]+(?=</span>)").matcher(input);
        StringBuffer result=new StringBuffer();
        String url="<a link=\"http://#link?index={0}\">{1}</a>";
        int count=1;
        while(m.find()){
            m.appendReplacement(result,MessageFormat.format(url, count,"$0"));            
            count++;
        }
        m.appendTail(result);
        return result.toString();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文