我需要从字符串中捕获属性值,如下所示:
att_name1=value1|att_name2=value2|att_name3=value3
属性可以是任何顺序。属性数约为50。
我了解可以匹配字符串的外观。 我编写了可以按特定顺序捕获值的正则表达式:
"^att1=(?<g1>\\w+)\\|att2=(?<g2>\\w+)\\|att3=(?<g3>\\w+)$"
这是处理任何属性顺序的方法吗?
答案 0 :(得分:5)
您可以使用此正则表达式:
\b(\w+)=(\w+)\b
捕获属性的名称和值。匹配将在Groups[1].Value
和Groups[2].Value
中保留您的值。
请参阅demo
示例正则表达式声明:
var rx = new Regex(@"\b(\w+)=(\w+)\b", RegexOptions.Compiled);
或者最好在调用方法之外将其声明为private static readonly
字段。
如果您只想匹配已知属性及其各自的值,请将named capturing groups与alternation operator一起使用:
att_name1=(?<att_value1>\w+)|att_name2=(?<att_value2>\w+)|att_name3=(?<att_value3>\w+)
然后使用.Groups["att_value1"].Value
等访问它们。请参阅demo here。