【问题标题】:C# RegExp for search inner pattern用于搜索内部模式的 C# RegEx
【发布时间】:2015-05-06 08:45:49
【问题描述】:

我有一个这样的字符串:

[[[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]]]

这是怎么回事?你能帮帮我吗?

【问题讨论】:

  • 字符串输入 = "[[[a]]][[[b]]][[[c]]]";正则表达式 regexObj = new Regex(@"[[[(.+?)]]]"); foreach (在 regexObj.Matches(input) 中匹配 er) { MessageBox.Show(er.Value); }
  • 你得到了匹配,但你不是在寻找组的捕获:er.Groups[0].Captures[0].Value.
  • @Boggin Groups[0] 是整场比赛。
  • 我吃早餐的时候这么简单的问题?不公平。 :)

标签: c# regex text


【解决方案1】:

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

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

参考MSDN

【讨论】:

    【解决方案2】:

    试试这个:

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

    这使用 unicode 开始和结束括号。

    【讨论】:

      【解决方案3】:

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

      [a-z]
      

      【讨论】:

      • 如果真正的字符串(问题未简化)不仅包含 a-z,而且 OP 需要精确提取方括号内的值怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多