gpt4 book ai didi

Java:正则表达式模式无法识别 HTML 中的空格

转载 作者:行者123 更新时间:2023-11-28 02:00:20 31 4
gpt4 key购买 nike

代码:

static short state = 0;
static int td_number = 0;

public static void main(String[] args) {

final Pattern p = Pattern.compile("^[\\s]*?\\d+\\.\\d+[\\s]*?");
final short TD_ENTRY = 0;
final short NO_ENTRY = 1;

HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {
public void handleText(char[] data, int pos) {
switch (state) {
case NO_ENTRY:
break;
case TD_ENTRY: {
// We are in the right table column
// Create string from char array
String s = new String(data);
Matcher m = p.matcher(s);
boolean b = m.matches();
// Check if data information has correct format (0.0)
if (b) {

}
}
break;
default:
break;
}
state = NO_ENTRY;
}

public void handleStartTag(HTML.Tag tag, MutableAttributeSet set, int pos) {
if (tag == HTML.Tag.TD) {
//[...]
}
}
};

Reader reader = new StringReader(html);
try {
new ParserDelegator().parse(reader, callback, false);
} catch (IOException e) {
}
}

我正在尝试使用正则表达式解析 HTML。该程序读取 html 表格中 td 标签的内容。表格单元格中的内容应符合 Pattern p 中定义的特殊模式。

现在的主要问题是正则表达式模式与像“0.1”这样的单元格内容不匹配。但是,如果我在模式匹配的代码中使用值 ("0.1") 手动定义 String s

此外,如果我在 Debug模式下复制 char[] data 的内容并使用此复制的内容定义 s 模式也不适合,尽管它看起来像上面手动定义的值。

是否有可能找出真正读取了哪些空白字符?

似乎空格并不总是空格,因此与正则表达式类 [\s] 不匹配。这可能吗?

编辑:

感谢您的回答。它实际上是一个空白字符 (\xA0),无法被\s 正则表达式类识别。

对于所有投反对票(真的很沮丧)的人,我的问题只是误解了我的意思。也许问题真的出在“我想用正则表达式解析 HTML”这句话,但实际上我只是从一个带有未知空白字符的 HTML 表格单元格中获取内容 ;-)。

我想我在使用像 jsoup 这样的库时遇到了同样的问题。

最佳答案

在 Java 正则表达式中,为了匹配 \s,不间断空格字符(NBSP,U+00A0)传统上不被视为空格。如果这是导致问题的原因,您只需将其添加到现有的空白类中:

"^[\\s\\xA0]*\\d+\\.\\d+[\\s\\xA0]*$"

\s 不匹配其他 Unicode 空白字符,但没有一个像 NBSP 一样常见。

或者,如果您运行的是 Java 7+,则可以指定 UNICODE_CHARACTER_CLASS mode并继续使用 \s

关于Java:正则表达式模式无法识别 HTML 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14321315/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com