【问题标题】:Regex to match only the first tag正则表达式仅匹配第一个标签
【发布时间】:2012-07-12 15:41:02
【问题描述】:

我正在尝试编写一个正则表达式来在一个长长的 xml 字符串中找到一个选择,然后提取它找到的第一个标签实例。

我当前的代码(提取每场比赛):(<action>(.*?)</action>)

示例代码:

<request guid="58004a1e-0c32-4002-a101-59fc28af5836">
<action>Sample/Action</action><date>"7/12/12"</date>

我已经尝试使用多种我发现的方法来匹配第一个实例并忽略其他所有内容,检查并确保在当前匹配之前没有匹配,将其设置为完全匹配等等,但它们都返回两个火柴。我无法设置正则表达式来查找特定的前导或尾随标签,因为它们可能会发生变化。

【问题讨论】:

  • 为什么不使用 xml 解析器而不是正则表达式?
  • 你写你可以得到所有个匹配,那么得到第一个应该很简单?
  • 听起来你需要重新考虑你的数据结构/解析。最好立即获得它,而不是在您意识到它不适合您不断变化的需求时将其修复。

标签: c# java xml regex parsing


【解决方案1】:

简单的答案:停止。

您问错了问题,因为在确定正则表达式是否适合解决您的问题之前,您已经决定要使用正则表达式来解决您的问题。

C# 和 Java 都有 XML 解析库,最好使用其中一个,而不是尝试使用正则表达式复制它们的功能,这通常是不可能的任务,因为 XML 不是常规的语言。

另请参阅 this answer,尽管该问题与 HTML 有关。

【讨论】:

  • 问题是我没有将它用于我正在编写的应用程序,我将它用于我们公司的另一个在 java 中运行的应用程序,我唯一能做的就是将正则表达式字符串传递给它。我原以为没有现实的方法可以做到这一点,但无论如何我还是想研究一下以确保。
  • @BillyGallon 传递一个选择整个 XML 并针对结果运行 XPath 查询的正则表达式。从当前正则表达式返回的集合中选择第一个匹配项也不难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 2012-09-05
  • 2018-06-28
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多