包含在< *>,C#中的字符串的正则表达式

时间:2009-12-14 16:56:16

标签: c# regex

我正在尝试将所有字符串括在< *>中通过使用以下正则表达式:

Regex regex = new Regex(@"\<(?<name>\S+)\>", RegexOptions.IgnoreCase);
string name = e.Match.Groups["name"].Value;

但在某些情况下,我的文字如下:

<Vendors><Vtitle/>  <VSurname/></Vendors> 

它返回两个字符串而不是四个字符串,即高于正则表达式输出

<Vendors><Vtitle/> //as one string and 
<VSurname/></Vendors> //as second string

我期待四个字符串:

<Vendors>
<Vtitle/>
<VSurname/>
</Vendors> 

请您指导一下我需要对我的正则表达式进行哪些更改。

我尝试添加'\ b'来指定单词边界

new Regex(@"\b\<(?<name>\S+)\>\b", RegexOptions.IgnoreCase);

,但这没有帮助。

3 个答案:

答案 0 :(得分:9)

使用正则表达式/<([^>]*)>/,您将获得所需的大部分内容。 (无需转义尖括号,因为尖括号在大多数正则表达式引擎中都不是特殊字符,包括.NET引擎。)我提供的正则表达式还将捕获尾随空格和标记上的任何属性 - 可靠地解析这些内容是超出合理正则表达式范围的方式。

但是,请注意,如果您尝试使用正则表达式解析XML / HTML,that way lies madness

答案 1 :(得分:6)

正则表达式是解析XML的错误工具。尝试使用System.Xml.LinqXElement)API。

答案 2 :(得分:4)

您的正则表达式使用\ S +作为通配符。在英语中,这是“一系列一个或多个字符,其中没有一个是非空格”。换句话说,当正则表达式<(?<name>\S+)>应用于此字符串:'`时,正则表达式将匹配整个字符串。尖括号是非空格。

我认为你想要的是“一系列一个或多个字符,其中没有一个是尖括号”。

正则表达式为<(?<name>[^>]+)>

啊,正则表达式。设计看起来像卡通咒骂的语言。