我真的不知道该怎么做,但我需要一些正则表达式的帮助。首先,我想澄清一下,我并不是想尝试匹配HTML或XML,虽然它可能看起来像它,但事实并非如此。下面的内容是我用于程序的文件格式的一部分,我用它来指定应该在该程序中导出哪些细节。没有涉及层次结构,只是每个新行都包含一个“标记”:
<n>
这与我的程序匹配,找到一个枚举,告诉我的程序导出名称值,无论如何,我也有这样的标签:
<adr:home>
指定家庭住址。我使用以下正则表达式:
<((?'TAG'.*):(?'SUBTAG'.*)?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?>
问题是正则表达式会将adr:home标记拆分,但找不到n标记,因为它没有冒号,但是当我添加一个?或者*,然后它不会拆分adr:home和类似的标签。有人可以帮忙吗?我确信这很简单,这只是我第一次创建正则表达式。顺便说一句,我在C#工作。
答案 0 :(得分:1)
不完全确定你的目标是什么,但试试这个:
(?><)(?'TAG'[^:\s>]*)(:(?'SUBTAG'[^\s>:]*))?(\s\w+=['"](?'VALUE'[^'"]*)['"])?(?>>)
我发现this site对测试C#正则表达式非常有用。
答案 1 :(得分:1)
这会有帮助吗
<((?'TAG'.*?)(?::(?'SUBTAG'.*))?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?>
我已经将:捕获到非捕获组圆形子标签中,并使标记捕获非贪婪
答案 2 :(得分:0)
如果您将冒号作为第二个标记的一部分会怎样?
<((?'TAG'.*)(?':SUBTAG'.*)?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?>