java - 无法使用 REGEX 解析 Java 中带点的字符串

标签 java regex vaadin7 rich-text-editor

将 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; 
}

第一行可以很好地删除旧的 html 标签,例如 width="500",其他行将进入 style 属性并尝试删除诸如 width:300.45pt 之类的属性; 冒号的不同位置。

代码在测试页 http://www.regexplanet.com/advanced/java/index.html 上运行良好。我在这里生成了我的正则表达式字符串,专门用于 java,但它仍然无法正常工作。有人有什么想法吗?

这是一个找不到宽度属性的示例

 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 :-)

看来我还必须用反斜杠转义分号?我会测试一下

最佳答案

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

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

请参阅regex demo

\b 是单词边界(确保我们仅将 width 作为整个单词进行匹配)。

详细信息:

  • \b - 前导字边界
  • width: - 文字字符串width:
  • \s* - 0+ 空白符号
  • [.0-9]* - 0+ 个点或数字
  • pt; - 文字 pt;

关于java - 无法使用 REGEX 解析 Java 中带点的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467654/

相关文章:

javascript - PHP 和 Javascript 中密码匹配的正则表达式

java - 如何将具有过滤功能的嵌套复杂属性添加到 Vaadin 7 Grid?

java - 将 spring-boot-starter-security 与 Vaadin 7 集成

java - Vaadin 国际化问题 : java. util.MissingResourceException

java - 定制DAO : persist and record exists?

java - 使用迭代器查看树集中的下一个元素

regex - Shell 脚本(用于移动文件的正则表达式)

javascript - 如何在 JavaScript 中使用 RegEx 从 twitch 剪辑中提取 URL

java - 一个Swing新手,想做一个小动眼的Java GUI实践但是卡住了

java - 为每个搜索查询设置不同的页面长度