正则表达式从具有多个方括号的字符串中查找匹配项
Regex to find matches from a string having multiple square brackets
我有一段如下:
用于测试 [!#today] 的一些措辞,其中 [!condition] 不满足此措辞 [!ShowElemIf://Student/FullName; [[[文本未完全识别]]] ;/名字] 但是发现简单标签有年龄 [!ShowElemIf://Student/Age;xml//Student/DOB/@格式化;y]
我需要从上面找到所有 placeholders/tags,例如:使用 C# 的 [!tag]。我尝试了一个正则表达式,但它无法找到上面以粗体突出显示的具有 "FullName" 单词的标签。
List<string> tags = Regex.Matches(
sampleText.Replace(Environment.NewLine, ""), @"\[!([^]]+)\] ")
.Cast<Match>()
.Select(x => x.Groups[1].Value)
.ToList();
使用这个正则表达式我可以在下面找到但找不到突出显示的那个。
- 今天
- 条件
- ShowElemIf://Student/Age;xml//Student/DOB/@formatted;y
您需要使用 .NET 正则表达式中可用的平衡组:
@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"
详情:
\[!
- [!
子串
((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))
- 捕获组 1 匹配
(?:
- 具有 3 个备选方案的非捕获组:
[^][]+|
- 除了 [
和 ]
或 之外的 1 个或多个字符
(?<o>\[)|
- [
推入 "o" 组堆栈,或
(?<-o>)]
- 从 "o" 组堆栈中减去 ]
)*
- 零次或多次出现
(?(o)(?!)))
- 检查 "o" 组堆栈是否为空的条件构造。如果为空,则继续匹配,否则,不返回匹配。
]
- 文字结束 ]
符号。
我有一段如下:
用于测试 [!#today] 的一些措辞,其中 [!condition] 不满足此措辞 [!ShowElemIf://Student/FullName; [[[文本未完全识别]]] ;/名字] 但是发现简单标签有年龄 [!ShowElemIf://Student/Age;xml//Student/DOB/@格式化;y]
我需要从上面找到所有 placeholders/tags,例如:使用 C# 的 [!tag]。我尝试了一个正则表达式,但它无法找到上面以粗体突出显示的具有 "FullName" 单词的标签。
List<string> tags = Regex.Matches(
sampleText.Replace(Environment.NewLine, ""), @"\[!([^]]+)\] ")
.Cast<Match>()
.Select(x => x.Groups[1].Value)
.ToList();
使用这个正则表达式我可以在下面找到但找不到突出显示的那个。
- 今天
- 条件
- ShowElemIf://Student/Age;xml//Student/DOB/@formatted;y
您需要使用 .NET 正则表达式中可用的平衡组:
@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"
详情:
\[!
-[!
子串((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))
- 捕获组 1 匹配(?:
- 具有 3 个备选方案的非捕获组:[^][]+|
- 除了[
和]
或 之外的 1 个或多个字符
(?<o>\[)|
-[
推入 "o" 组堆栈,或(?<-o>)]
- 从 "o" 组堆栈中减去]
)*
- 零次或多次出现(?(o)(?!)))
- 检查 "o" 组堆栈是否为空的条件构造。如果为空,则继续匹配,否则,不返回匹配。
]
- 文字结束]
符号。