有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法在带有正则表达式的Java中分析带点的字符串

当将word文档中的内容复制并粘贴到Vaadin7 RichTextArea(或任何其他Richtextfield)中时,会有大量不需要的HTML标记和属性。因为在当前的项目中,属性宽度做了一些有趣的事情,我想用下面的功能删除它们

private String cleanUpHTMLcontent(String content) {
    LOG.log(Level.INFO, "Cleaning up that rubbish now");

    content = content.replaceAll("width=\"[0-9]*\"",""); // this works fine
    content = content.replaceAll("width:[0-9]*[\\.|]*[0-9]*pt;",""); // not working
    content = content.replaceAll(";width:[0-9]*[\\.|]*[0-9]*pt",""); // not working
    content = content.replaceAll("width:[0-9]*[\\.|]*[0-9]*pt",""); // not working
    return content; 
}

第一行可以很好地删除像width="500"这样的旧html标记,其他行将进入style属性,并尝试删除像width:300.45pt;这样具有冒号不同位置的属性

代码在测试页面http://www.regexplanet.com/advanced/java/index.html上运行良好。我在这里生成了我的正则表达式字符串,专门用于java,但它仍然不起作用。有人知道吗

这里有一个例子,它没有找到width属性

 td style="width:453.1pt;border:solid windowtext 1.0pt; 

更新

    content = content.replaceAll("width:\\s*[.0-9]*pt;",""); // doesn't work
    content = content.replaceAll(";width:\\s*[.0-9]*pt",""); // doesn't work
    content = content.replaceAll("width:\\s*[.0-9]*pt",""); // works :-)

看来,我还得用反斜杠避开分号?我会测试一下


共 (1) 个答案

  1. # 1 楼答案

    要删除带点的任意数字,可以使用否定字符类[.\d]*[.0-9]*

    "\\bwidth:\\s*[.0-9]*pt;"
    

    regex demo

    \b是一个单词边界(确保我们只匹配整个单词的width

    详情:

    • \b-前导词边界
    • width:-literal string width:
    • \s*-0+空格符号
    • [.0-9]*-0+点或数字
    • pt;-literal{}