我正在尝试使用正则表达式将以下字符串分隔成单独的行
[property1=text1][property2=text2]
并且期望的结果应该是
property1=text1
property2=text2
这是我的代码
string[] attrs = Regex.Split(attr_str, @"\[(.+)\]");
结果不正确,我可能做错了什么
更新:应用建议的答案后。现在它显示空格和空字符串
.+
是一个贪婪的匹配,所以它尽可能地抓住。
使用任一
\[([^]]+)\]
或者
\[(.+?)\]
在第一种情况下,]
不允许匹配,因此“尽可能”变得更短。第二个使用非贪婪匹配。
你的点也在抓住牙套。您需要排除大括号:
\[([^]]+)\]
[^]]
匹配除右括号之外的任何字符。
尝试:
var s = "[property1=text1][property2=text2]";
var matches = Regex.Matches(s, @"\[(.+?)\]")
.Cast<Match>()
.Select(m => m.Groups[1].Value);
尝试添加“懒惰”说明符:
Regex.Split(attr_str, @"\[(.+?)\]");