【问题标题】:Regex match xml attribute value [closed]正则表达式匹配 xml 属性值
【发布时间】:2012-11-23 15:25:23
【问题描述】:

我要获取这个xml属性limit=\"25\"的整数值

我试过这个:Match match = Regex.Match(response.Content, "(?<=limit=))\\d+"); 给我一个错误:“太多)。

还有这个:Match match = Regex.Match(response.Content, @"limit=([0-9])$" 这什么都不返回,匹配不成功

来自这个 xml:

<issues type="array" limit="25" total_count="251" offset="0">
<issue>
<id>4317</id>

【问题讨论】:

  • 为什么不使用 xml 解析器?
  • 因为我的程序接收到一个格式为 xml 的字符串
  • @ConradC 请不要使用REGEX...
  • @ConradC a string formatted as xml 使用真正的 xml 解析器的最佳情况。
  • @ConradC - 您的程序如何接收格式化为 xml 的字符串来排除使用 XML 解析器?

标签: c# xml regex parsing


【解决方案1】:

您的第一个正则表达式中有太多 )。数一数。

由于属性值周围的引号,您的第二个失败。请改用"limit=\"([0-9])\"$"

很多人会告诉您改用 XML 解析器。我强烈建议,如果您要做的不仅仅是从众所周知的 XML 中提取少量数据,因为 XML 本身不能用正则表达式解析。

【讨论】:

  • 第二个也失败了,因为多于一位。试试"limit=\"([0-9]+)\"$""limit=\"(\d+)\"$"
【解决方案2】:

Regex 可用于解析 XML,因为它的格式严格,但不推荐使用它

使用LINQ2XML

XElement doc=XElement.Parse(response.Content);       
var value=doc.Attribute("limit").Value;

var value=Regex.Match(response.Content, @"limit=""(\d+)""",RegexOptions.Singleline).Groups[1].Value;

【讨论】:

  • 谢谢,但我不想要子元素的集合,元素是xml中的第一个。 4317
  • @ConradC 抱歉回复晚了..查看编辑
  • 很好,但是你的代码不起作用,它返回一个空字符串。我使用 indexof 来获取 limit 和 " " 的索引,然后我使用子字符串获取值。属性是这个limit=\"25\" 有\反斜杠
  • @ConradC - 这里第二个例子中引号之间的正则表达式需要是:limit=""(\d+)""
  • @FrancisGagnon thxx..for that
【解决方案3】:

最好用

string TheStringNeededToBeParsed = "... xml";

TheStringNeededToBeParsed .IndexOf(...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多