gpt4 book ai didi

html数据上的java模式匹配器正则表达式

转载 作者:行者123 更新时间:2023-12-01 22:21:24 25 4
gpt4 key购买 nike

如何使用 java 正则表达式模式匹配器来隔离文本 Q170596 ,我尝试在 regexr.com 上执行此操作但转义字符与 java.lang 不对应。

这是我要解析的文本:

<!-- wikibase-toolbar --><span class="wikibase-toolbar-container"><span class="wikibase-toolbar-item wikibase-toolbar ">[<span class="wikibase-toolbar-item wikibase-toolbar-button wikibase-toolbar-button-edit"><a href="/wiki/Special:SetSiteLink/Q170596">edit</a></span>]</span></span>

为了挖掘Q170596 ,其余的可以扔掉。

我猜应该是这样的:

//this is not right
Pattern p = Pattern.compile("<!-- wikibase-toolbar --><span class=\"wikibase-toolbar-container\"><span class=\"wikibase-toolbar-item wikibase-toolbar \">[<span class=\"wikibase-toolbar-item wikibase-toolbar-button wikibase-toolbar-button-edit\"><a href=\"/wiki/Special:SetSiteLink/(.*?)\">edit<\/a><\/span>]<\/span><\/span>");

String line;
while ((line = br.readLine()) != null)
{
Matcher m = p.matcher(line);
if( m.matches() )
{
String first_part = m.group(1);
String thing_i_want = m.group(2);
String more_crap = m.group(3);
}
}

我曾经被告知在 html 上使用正则表达式不是一种好的风格,是吗?但对于这个任务我认为它会起作用,不是吗?

最佳答案

Pattern p = Pattern.compile("<!-- wikibase-toolbar --><span class=\"wikibase-toolbar-container\"><span class=\"wikibase-toolbar-item " +
"wikibase-toolbar \">\\[<span class=\"wikibase-toolbar-item wikibase-toolbar-button wikibase-toolbar-button-edit\"><a " +
"href=\"/wiki/Special:SetSiteLink/(.*?)\">edit</a></span>\\]</span></span>");

这就是你想要的模式

转义 [ 和 ]\\[ 和\\]也不要逃避

</a> and </span>

标签。

并且您认为 .group(1) 获取您想要的部分之前的所有内容,.group(2) 获取匹配区域,而 .group(3) 获取该行的其余部分。这不是匹配器的工作原理。

每组 ( ) 都是您可以检索的组。如果您使用一组 ( ),则 .group(1) 将检索此匹配的组。

public class Test {
public static void main(String[] argv) {
Pattern p = Pattern.compile("<!-- wikibase-toolbar --><span class=\"wikibase-toolbar-container\"><span class=\"wikibase-toolbar-item " +
"wikibase-toolbar \">\\[<span class=\"wikibase-toolbar-item wikibase-toolbar-button wikibase-toolbar-button-edit\"><a " +
"href=\"/wiki/Special:SetSiteLink/(.*?)\">edit</a></span>\\]</span></span>");
String line = "<!-- wikibase-toolbar --><span class=\"wikibase-toolbar-container\"><span class=\"wikibase-toolbar-item wikibase-toolbar " +
"\">[<span class=\"wikibase-toolbar-item wikibase-toolbar-button wikibase-toolbar-button-edit\"><a href=\"/wiki/Special:SetSiteLink/Q170596\">edit</a></span>]</span></span>";

Matcher m = p.matcher(line);
if (m.matches()) {
String first_part = m.group(1);
System.out.println(first_part);
}
}
}

一些提示:我相信这种模式可以简单得多。尝试最小化模式,例如仅通过正文内容编辑进行检查。

关于html数据上的java模式匹配器正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698102/

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