【发布时间】:2026-02-16 03:05:01
【问题描述】:
我正在尝试实现一个简单的正则表达式,它允许我在 XML 中捕获一些信息。
但是,我的 REGEX 捕获了几个标签并给了我一个很长的答案。例如,如果我有类似的东西:
<item>
<title>bla</title>
...
<description>bla</description>
</item>
<item>
<title>bla2</title>
....
<description>bla2, keyword here are blablabla</description>
</item>
但是,我使用如下的正则表达式:
<item><title>([\\p{L}\\p{N}\\W \\.\\,]*?)</title>.*?<description>[\\p{L}\\p{N} \\.\\,]keyword[\\p{L}\\p{N} \\.\\,]*</description>
标题和描述之间有标签。当我使用该正则表达式时,它会为我提供所有标签,直到它第一次找到“关键字”这个词。所以,问题出在这一行:
</title>.*?<description>
我如何告诉我的正则表达式,如果它找到的第一个描述标签没有关键字,它应该选择下一个标签并从第二个项目标签返回结果。或者,如果标题标签和描述标签之间存在结束项标签,则它不应该查找这两者之间的所有数据。
我希望我能清楚地解释自己。如果需要,请要求澄清。
编辑:
另一种解决方案:
<item><title>([\\p{L}\\p{N}\\W \\.\\,]*?)</title>(?:(?!<item>).)*?<description>[\\p{L}\\p{N} \\.\\,]keyword[\\p{L}\\p{N} \\.\\,]*</description>
使用 (?:(?!).)* 作为负前瞻以避免在新项目中捕获字符串。
【问题讨论】:
-
为什么要用正则表达式解析 XML?使用 XML 解析器不是更省钱吗?为正确的工作使用正确的工具?
-
这不是个人选择。这是为了学术练习。
-
我正面临两难境地...我应该链接到那个问题吗?
-
你有一个学术练习告诉你必须在不适合的工作中使用工具(正则表达式)?不确定我是否理解。无论如何,如果有一个正则表达式可以满足您的需求,那么它肯定不会是您所说的“简单”。
-
是的,目的是使用 REGEX 从 RSS 获取数据。在这个特定的练习中,我需要通过描述标签中的关键字过滤新闻。我已经很接近找到答案了……