我正在尝试将所有字符串括在< *>中通过使用以下正则表达式:
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);
,但这没有帮助。
答案 0 :(得分:9)
使用正则表达式/<([^>]*)>/
,您将获得所需的大部分内容。 (无需转义尖括号,因为尖括号在大多数正则表达式引擎中都不是特殊字符,包括.NET引擎。)我提供的正则表达式还将捕获尾随空格和标记上的任何属性 - 可靠地解析这些内容是超出合理正则表达式范围的方式。
但是,请注意,如果您尝试使用正则表达式解析XML / HTML,that way lies madness
答案 1 :(得分:6)
正则表达式是解析XML的错误工具。尝试使用System.Xml.Linq
(XElement
)API。
答案 2 :(得分:4)
您的正则表达式使用\ S +作为通配符。在英语中,这是“一系列一个或多个字符,其中没有一个是非空格”。换句话说,当正则表达式<(?<name>\S+)>
应用于此字符串:'`时,正则表达式将匹配整个字符串。尖括号是非空格。
我认为你想要的是“一系列一个或多个字符,其中没有一个是尖括号”。
正则表达式为<(?<name>[^>]+)>
。
啊,正则表达式。设计看起来像卡通咒骂的语言。