1

我正在尝试使用正则表达式将以下字符串分隔成单独的行

[property1=text1][property2=text2] 

并且期望的结果应该是

property1=text1
property2=text2

这是我的代码

string[] attrs = Regex.Split(attr_str, @"\[(.+)\]");

结果不正确,我可能做错了什么

在此处输入图像描述

更新:应用建议的答案后。现在它显示空格和空字符串

在此处输入图像描述

4

4 回答 4

5

.+是一个贪婪的匹配,所以它尽可能地抓住。

使用任一

\[([^]]+)\]

或者

\[(.+?)\]

在第一种情况下,]不允许匹配,因此“尽可能”变得更短。第二个使用非贪婪匹配。

于 2012-07-09T15:49:53.267 回答
4

你的点也在抓住牙套。您需要排除大括号:

\[([^]]+)\]

[^]]匹配除右括号之外的任何字符。

于 2012-07-09T15:50:05.003 回答
2

尝试:

var s = "[property1=text1][property2=text2]";
var matches = Regex.Matches(s, @"\[(.+?)\]")
    .Cast<Match>()
    .Select(m => m.Groups[1].Value);
于 2012-07-09T15:52:43.250 回答
2

尝试添加“懒惰”说明符:

Regex.Split(attr_str, @"\[(.+?)\]"); 
于 2012-07-09T15:52:24.300 回答