【问题标题】:Remove other language space in html移除 html 中的其他语言空间
【发布时间】:2015-09-27 04:36:13
【问题描述】:

我想使用 StringUtils.strip() 修剪标签名称和属性之间的空格。因为我有一些空间无法被 遵循 Jericho 方法:

  • CharacterReference.decodeCollapseWhiteSpace(htmlFragment))
  • 文本提取器 -Tag[] allTags = source.fullSequentialParse();

第一种方法删除正常空间,但不删除其他语言空间。 这是我得到的错误。例如

html = "<a   href=\"test.html\"><font></font></a>";

StartTag a at (r1,c1,p0) rejected because the name contains an invalid character at position (r1,c3,p2)
Encountered possible StartTag at (r1,c1,p0) whose content does not match a registered StartTagType

jericho 中还有一个 generateHTML 方法,但我们必须提供所有属性值等

public static java.lang.String generateHTML(java.util.Map<java.lang.String,java.lang.String> attributesMap)

在完整的顺序解析中,它无法识别其他语言空间。

如何仅删除标签名称和属性之间的其他语言空间? (属性值之间的其他语言空间是可以的)这就是为什么我不能做string.replaceALL()

【问题讨论】:

  • 它根本不是空格(它只是显示为空格)。所以要用Java替换它,你必须替换这个字符。我会在把它交给 Jericho 之前执行那个替换:用空格替换你的角色,让 Jericho 在第二步中清理任何不需要的空格。
  • 我认为它被视为无效字符 System.out.println("Char Ref:" + source.getParseText().charAt(4));这是输出 Char Ref:¡
  • 对于jericho,它是一个无效字符,对于Java,它不应该是(除非您正在运行Java 的本地化版本)。所以Java应该能够替换那个字符。知道角色的起源吗?
  • 是的,我可以在 java 中使用 StringUtils.strip() 替换它,我的问题是我只需要删除标签名称和标签属性之间的这个空格才能被识别。(这是一个日本空间)
  • 你可以试试 jsoup 而不是 Jericho,看看它是否接受你的空间。否则你几乎只剩下全部替换(我不会去掉它们:用普通空格替换它们,然后使用 Jericho 清理)或编写你自己的代码来识别 html 标签并替换不需要的字符。

标签: java html html-parsing jericho-html-parser


【解决方案1】:

你可以使用 String.replaceAll()。

    String html = "<a   href=\"test.html\">   <font></font></a>";
    System.out.println(html.replaceAll("(?<=<\\w{1,100})[\\s\\u3000]+", " "));
    // -> <a href="test.html">   <font></font></a>

此代码将包括\u3000(表意空格)在内的所有空格替换为一个空格。空格前面必须有&lt;ELEMENT_NAME。但是前面没有被替换。 (参见Class Pattern 中的“零宽度正向lookbehind”)此代码中ELEMENT_NAME 的长度限制在1 到100 之间。

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2010-10-13
    • 1970-01-01
    • 2020-03-30
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多