如何将正则表达式分成精确的单词?

时间:2015-04-24 08:11:45

标签: c# regex

我需要一些关于C#中正则表达式的帮助

我有以下字符串

"[[Sender.Name]]\r[[Sender.AdditionalInfo]]\r[[Sender.Street]]\r[[Sender.ZipCode]] [[Sender.Location]]\r[[Sender.Country]]\r"

字符串也可以包含空格,理论上还包含任何其他字符。所以我真的需要匹配[[words]]。

我需要的是像这样的文本数组

"[[Sender.Name]]",
"[[Sender.AdditionalInfo]]",
"[[Sender.Street]]",
// ... And so on. 

我很确定这完全可以用于:

var stringArray = Regex.Split(line, @"\[\[+\]\]")

我太傻了,无法为Regex.Split()调用找到正确的正则表达式。

这里的任何人都可以告诉我在我的案例中使用正确的正则表达式吗?

正如你所知道的那样,我不熟悉RegEx:)

3 个答案:

答案 0 :(得分:6)

为什么不根据“\ r”拆分?

并且您不需要正则表达式,只需使用标准字符串函数

$cmd_options

答案 1 :(得分:1)

您正在使用的正则表达式(\[\[+\]\])将捕获:文字[ s 2或更多,然后是2个文字] s。

正则表达式解决方案是捕获内部加倍[[内的所有非](并且括号内的字符串不应为空,我猜?),以及将MatchCollection强制转换为列表或数组(此处是带列表的示例):

var str = "[[Sender.Name]]\r[[Sender.AdditionalInfo]]\r[[Sender.Street]]\r[[Sender.ZipCode]] [[Sender.Location]]\r[[Sender.Country]]\r";
var rgx22 = new Regex(@"\[\[[^]]+?\]\]");
var res345 = rgx22.Matches(str).Cast<Match>().ToList();

输出:

enter image description here

答案 2 :(得分:1)

如果您想获得[[..]]阻止,请进行匹配。

Regex rgx = new Regex(@"\[\[.*?\]\]");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[0].Value);

IDEONE