正则表达式帮助(再次)

时间:2011-08-31 11:03:31

标签: c# regex

我真的不知道该怎么做,但我需要一些正则表达式的帮助。首先,我想澄清一下,我并不是想尝试匹配HTML或XML,虽然它可能看起来像它,但事实并非如此。下面的内容是我用于程序的文件格式的一部分,我用它来指定应该在该程序中导出哪些细节。没有涉及层次结构,只是每个新行都包含一个“标记”:

<n>

这与我的程序匹配,找到一个枚举,告诉我的程序导出名称值,无论如何,我也有这样的标签:

<adr:home>

指定家庭住址。我使用以下正则表达式:

<((?'TAG'.*):(?'SUBTAG'.*)?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?>

问题是正则表达式会将adr:home标记拆分,但找不到n标记,因为它没有冒号,但是当我添加一个?或者*,然后它不会拆分adr:home和类似的标签。有人可以帮忙吗?我确信这很简单,这只是我第一次创建正则表达式。顺便说一句,我在C#工作。

3 个答案:

答案 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'.*[^'])('|"")?)?)?>