用于搜索内部模式的 C# RegEx

C# RegExp for search inner pattern

我有这样的字符串:

[[[a]]][[[b]]][[[c]]]

我想提取这些:

a
b
c

所以我写了下面的模式:

@"\[\[\[(.+?)\]\]\]"

使用以下代码

string input = "[[[a]]][[[b]]][[[c]]]";
Regex regexObj = new Regex(@"\[\[\[(.+?)\]\]\]");
foreach (Match er in regexObj.Matches(input)) 
{ 
    MessageBox.Show(er.Value); 
} 

结果是:

[[[a]]]
[[[b]]]
[[[c]]]

怎么了?你能帮帮我吗?

而不是 er.Value 你需要使用 er.Groups[1].Value.

er.Valueer.Groups[0].Value 相同,它包含一个匹配整个正则表达式模式的字符串。每个后续元素,从索引 1 向上,代表一个捕获的组。

参考MSDN

为什么不是这个模式(它为您的示例提供了正确的输出)?

[a-z]

试试这个:

[^\p{Ps}\p{Pe}]

这使用 unicode 左括号和右括号。