【问题标题】:Regex xml date expression [closed]正则表达式 xml 日期表达式
【发布时间】:2016-09-26 07:47:05
【问题描述】:

我有一个反序列化的 xml,如下所示:

http://wklej.org/id/2869540/

如何编写一个正则表达式来查找并仅返回第一个日期表达式23.12.2010,这可能是每隔一个 xml 文档中的另一个。

我从未使用过正则表达式,我什至不知道如何为其编写模式。请帮忙。

【问题讨论】:

  • 如果日期总是出现在line=7id=17,你应该使用XML解析器。
  • 如果你想要的是一个正则表达式来检测具有dd.mm.yyyy 模式的日期,那么你需要的看起来像\d{2}\.\d{2}\.\d{4} 或像\d\d?\.\d\d?\.\d{4},如果你可以有一个像@ 这样的日期987654328@ 而不是 01/02/2010
  • 不是,我必须通过正则表达式来完成

标签: c# regex xml


【解决方案1】:

不要将正则表达式用于 HTML/XML 解析。使用 Html/Xml 解析器。这里很好地解释了为什么你不应该使用它。

RegEx match open tags except XHTML self-contained tags

Can you provide some examples of why it is hard to parse XML and HTML with a regex?

您可以在 XDocument 或 XmlDocument 中加载字符串,并使用 linq 来获取您需要的任何内容。

这里是如何做到这一点的小例子:

string str =
@"<?xml version=""1.0""?>
<!-- comment at the root level -->
<Root>
    <Child>Content</Child>
</Root>";
XDocument doc = XDocument.Parse(str);

然后使用 linq 选择所需的节点并获取值。这个问题可能会有所帮助:

Finding element in XDocument?

【讨论】:

  • 感谢您的建议。我会试试的;)
  • @GrzesiekZimnoch 如果对您有帮助,您可以接受答案。
【解决方案2】:

按照其他人的建议,使用 Html/Xml 解析器。如果你真的想使用正则表达式,你可以试试这个:

 string xml= "yourXMLString";
 string pattern = @"\d{1,2}\.\d{1,2}\.\d{4}"; //also matches dates like 1.3.2016. Use \d{2} to only match 01.03.2016
 Regex regEx = new Regex(pattern);

 Match m = regEx.Match(xml);   // m is the first match
 if (m.Success)
 {
    Console.WriteLine(m.Value); //prints the first found date
 }

【讨论】:

  • 好的。谢谢你。我有一个问题,我的程序需要阅读所有文档,看起来像这个。一个日期为 01.01.2000 ,另一个日期为 01/01/2000 ,其他日期为 01- 01- 2000 ,其他日期为 01 - 01 - 2000 。不知道如何用模式解决。
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2012-06-20
相关资源
最近更新 更多