【问题标题】:Parsing XML using regex and grabbing the value inbetween tags使用正则表达式解析 XML 并获取标签之间的值
【发布时间】:2011-06-03 23:11:22
【问题描述】:

例如,我有一个正则表达式,用于在两组 id 之间获取数据 <CLASSCOD>70</CLASSCOD> 我使用的正则表达式是 (?<=<CLASSCOD>)(?:[^<]|<(?!/CLASSCOD))*,它在大多数情况下都有效,但是当我有一个像 <CLASSCOD>N</CLASSCOD> 这样的单个值时,它表示没有匹配项。

整个数据串是这样的

<DATE>0601</DATE>
<YEAR>11</YEAR>
<AGENCY>Department of the Interior</AGENCY>
<OFFICE>Bureau of Indian Affairs</OFFICE>
<LOCATION>BIA - DAPM</LOCATION>
<ZIP>85004</ZIP>
<CLASSCOD>N</CLASSCOD>
<OFFADD>Contracting Office - Western Region 2600 N. Central Avenue, 4th Floor Phoenix AZ 85004</OFFADD>
<SUBJECT>Boiler Replacement</SUBJECT>
<SOLNBR>A11PS00463</SOLNBR>
<RESPDATE>061711</RESPDATE>
<ARCHDATE>05312012</ARCHDATE>
<CONTACT>Geraldine M. Williams Purchasing Agent 6023794087 geraldine.williams@bia.gov;<a href="mailto:EC_helpdesk@NBC.GOV">Point of Contact above, or if none listed, contact the IDEAS EC HELP DESK for assistance</a>
</CONTACT>
<LINK><URL>https://www.fbo.gov/spg/DOI/BIA/RestonVA/A11PS00463/listing.html<LINKDESC>Link To Document</LINK>
<EMAIL></EMAIL>
<EMAIL>
  EC_helpdesk@NBC.GOV
  <EMAILDESC>
    Point of Contact above, or if none listed, contact the IDEAS EC HELP DESK for assistance
  </EMAILDESC>
</EMAIL>
<SETASIDE>Total Small Business</SETASIDE>
<POPCOUNTRY>USA</POPCOUNTRY>
<POPZIP>85634</POPZIP>
<POPADDRESS>BIE Tohono O'odham High School, Sells, AZ</POPADDRESS>

关于原因有什么建议吗?

谢谢

【问题讨论】:

  • 我建议使用 XPath 或其他 XML 技术,而不是使用正则表达式。
  • 我刚刚针对您所说的示例尝试了您的正则表达式,但它返回了一个匹配项。
  • 反对70还是N值?

标签: c# regex vb.net


【解决方案1】:

更简单的应该可以工作:

<CLASSCOD>(.+?)</CLASSCOD>

例子:

Match match = Regex.Match(input, @"<CLASSCOD>(.+?)</CLASSCOD>");
if (match.Success) {
    string value = match.Groups[1].Value;
    Console.WriteLine(value);
}

【讨论】:

  • 这给了我整个字符串,例如 "N" 返回 "N" 当我想要返回的只是两者之间的值,在这种情况下“N”个其他情况 70 有时更多
  • 非常好,我明白你的意思了。
【解决方案2】:

如果您想提取括号内的值,可以使用以下正则表达式:

<([^>]+)>([^<]*)</\1>

对于这种情况,无需使用前瞻和后瞻运算符。

【讨论】:

  • 我更新了问题。不止这一组数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多