正则表达式以任何顺序捕获组

时间:2015-05-06 08:02:57

标签: c# regex

我需要从字符串中捕获属性值,如下所示:

att_name1=value1|att_name2=value2|att_name3=value3

属性可以是任何顺序。属性数约为50。

我了解可以匹配字符串的外观。 我编写了可以按特定顺序捕获值的正则表达式:

"^att1=(?<g1>\\w+)\\|att2=(?<g2>\\w+)\\|att3=(?<g3>\\w+)$"

这是处理任何属性顺序的方法吗?

1 个答案:

答案 0 :(得分:5)

您可以使用此正则表达式:

\b(\w+)=(\w+)\b

捕获属性的名称和值。匹配将在Groups[1].ValueGroups[2].Value中保留您的值。

请参阅demo

示例正则表达式声明:

var rx = new Regex(@"\b(\w+)=(\w+)\b", RegexOptions.Compiled);

或者最好在调用方法之外将其声明为private static readonly字段。

如果您只想匹配已知属性及其各自的值,请将named capturing groupsalternation operator一起使用:

att_name1=(?<att_value1>\w+)|att_name2=(?<att_value2>\w+)|att_name3=(?<att_value3>\w+)

然后使用.Groups["att_value1"].Value等访问它们。请参阅demo here