我希望得到您的帮助,找出.NET正则表达式的错误。我已经成千上万的表达,但我完全坚持修复这个简单的表达。
正则表达式如下:
(?isx)
<Field
(
\s+
|
name = "(?<name> [^"]*?)"
|
type = "(?<type> [^"]*?)"
|
value = "(?<value> [^"]*?)"
)+
>
(?<content> .*?)
</Field>
我想要捕捉的是像这样的XML部分:
<Field name="SolutionList/0/ModuleType" type="Enumeration" value="StartSectionModule"></Field>
<Field name="SolutionList/0/StartSectionModule/Title" type="String">Áttekintés</Field>
<Field name="SolutionList/0/TextModule/HtmlContent" type="RichContent"><![CDATA[]]></Field>
现在我要尝试逐步简化表达式以尝试找到有缺陷的部分,但我无法在几个小时内完成任何相关进展。
谢谢你的时间,伙计。
答案 0 :(得分:0)
除了在正则表达式中解析html的所有警告......
存在小间距问题。
我把它从自由间隔模式中取出来了。这个平面正则表达式现在有效:
(?s)<Field(\s+|name="(?<name>[^"]*?)"|type="(?<type>[^"]*?)"|value="(?<value>[^"]*?)")+>(?<content>.*?)</Field>
既然你写了它,我就不会向你解释了!
答案 1 :(得分:0)
您的第一个>
后面有left-to-right个隐身字符。将其删除并you'll be fine。
此外,您应该避免(\s+)+
类型的情况以避免灾难性的回溯:
(?isx)
<Field
(?:
\s+
(?:
name = "(?<name> [^"]*?)"
|
type = "(?<type> [^"]*?)"
|
value = "(?<value> [^"]*?)"
)
)+
>
(?<content> .*?)
</Field>