繁体   English   中英

正则表达式从具有多个方括号的字符串中查找匹配项

[英]Regex to find matches from a string having multiple square brackets

我有一个如下所示的段落:

测试[!#today]的一些措辞[!condition]不满足这个措辞[!ShowElemIf:// Student / FullName; [[[文字未被完全识别]]]; /名字]但发现有年龄的简单标签[!ShowElemIf://学生/年龄; xml //学生/ DOB / @格式化; y]

我需要从上面找到所有占位符/标签,例如:[!tag]使用C#。 我尝试使用正则表达式,但它无法找到具有“FullName”字样的标记,如上面的粗体突出显示。

 List<string> tags = Regex.Matches( sampleText.Replace(Environment.NewLine, ""), @"\\[!([^]]+)\\] ") .Cast<Match>() .Select(x => x.Groups[1].Value) .ToList(); 

使用此RegEx我可以在下面找到,但不能突出显示。

  1. 今天
  2. 条件
  3. ShowElemIf://学生/年龄; XML //学生/ DOB / @格式化; Y

您需要使用.NET regex中提供的平衡组

@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"

请参阅正则表达式演示

细节

  • \\[! - 一个[!
  • ((?:[^][]+|(?<o>\\[)|(?<-o>)])*(?(o)(?!))) - 捕获组1匹配
    • (?: - 一个有3种选择的非捕获组:
      • [^][]+| - 除[]以外的1个或多个字符,或
      • (?<o>\\[)| - [推入“o”组堆栈,或
      • 从“o”组堆栈中减去(?<-o>)] - a ]
    • )* - 零次或多次出现
    • (?(o)(?!))) - 检查“o”组堆栈是否为空的条件构造。 如果为空,则匹配继续,否则,不返回匹配。
  • ] -文字闭合]符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM