我有一个安静的长正则表达式,有时它反应很快,有时它会像疯了一样加载。
这是我的正则表达式:
<div class=""rwResult bg"">.*?mp3/d/[^>]+>(?<Name>[^<]+)</a>.*?artist:[^>]+>(?<Artist>[^<]+).*?user</span>[^>]+[^""]+""(?<Uploader>[^""]+).*?category:.*?"">.*?"">(?<Category>[^<]+).*?time: (?<Duration>[^ ]+) \| (?<StreamSize>[0-9]+) (?<Weight>[^ ]+) \| listened: (?<Clicks>[0-9]+).*?<a href=""(?<DownloadLink>http://dl[^""]+)
而不是为每个组使用很多正则表达式,我更喜欢做一次正则表达式。 在正则表达式执行时,是否有任何可以检查或避免长时间加载的函数?
我正在使用C#或F#希望有人能回答这个问题。
感谢。
答案 0 :(得分:2)
看起来您正在尝试使用正则表达式解析XML文档。这不是一种真正的最佳方法。我的猜测是,由于在正则表达式中使用了回溯,你会发现问题。
您可以尝试重写正则表达式,但XML不是常规语言,因此无法通过正则表达式进行解析。
查看文档How to read XML from a file by using Visual C#以开始使用。
旁注:有关尝试使用正则表达式解析非常规语言时会发生什么的有趣读物,请参阅此Stack Overflow question。
答案 1 :(得分:1)
我认为你使用的是错误的工具。你真的想要Xpath,可能还有XSLT。您希望使用正则表达式来解析原始XML的唯一时间是怀疑XML在语法上以可预测的方式被破坏。
说真的,看看Xpath - 深入研究XML文档的结构并拉出你想要的位是很神奇的。