[英]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我可以在下面找到,但不能突出显示。
您需要使用.NET regex中提供的平衡组 :
@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"
请参阅正则表达式演示
细节 :
\\[!
- 一个[!
子 ((?:[^][]+|(?<o>\\[)|(?<-o>)])*(?(o)(?!)))
- 捕获组1匹配
(?:
- 一个有3种选择的非捕获组:
[^][]+|
- 除[
和]
以外的1个或多个字符,或 (?<o>\\[)|
- [
推入“o”组堆栈,或 (?<-o>)]
- a ]
)*
- 零次或多次出现 (?(o)(?!)))
- 检查“o”组堆栈是否为空的条件构造。 如果为空,则匹配继续,否则,不返回匹配。 ]
-文字闭合]
符号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.