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