.NET C# 如何编写正则同时匹配[keyb]、[keyb2]两类标签包裹的内容
C# .NET 正则匹配多类标签内容解决方案
调整方案说明
你原有的正则存在未转义方括号的问题,[]在正则中是字符组元字符,匹配字面量方括号需要加\转义。调整后可同时匹配keyb和keyb2两类标签,有两种实现方式可选:
方式1:简单适配(仅匹配指定两类标签)
直接利用可选量词?匹配标签名末尾可选的2,代码如下:
Regex regex = new Regex(@"(?<=\[keyb2?\])(.*?)(?=\[/keyb2?\])", RegexOptions.Singleline);
参数说明:
- 加
RegexOptions.Singleline是为了让.可以匹配换行符,支持提取多行包裹的内容,如果仅需匹配单行内容可以去掉该参数。 - 该写法可以正常匹配你给出的测试输入:
[keyb]hello budy[/keyb] [keyb2]bye buddy[/keyb2],会分别提取到hello budy和bye buddy两个结果。
方式2:严格匹配前后标签对应(推荐)
避免出现[keyb]xxx[/keyb2]这类标签不匹配的错误内容被提取,通过后向引用确保前后标签一致:
Regex regex = new Regex(@"\[(?<tag>keyb2?)\](.*?)\[/\k<tag>\]", RegexOptions.Singleline);
提取内容时取第二个捕获组(索引为2的组)的值即可,示例调用代码:
string input = "[keyb]hello budy[/keyb] [keyb2]bye buddy[/keyb2]"; MatchCollection matches = regex.Matches(input); foreach (Match match in matches) { // 输出提取到的内容 Console.WriteLine(match.Groups[2].Value); }
运行上述代码会依次输出:
hello budy
bye buddy
内容的提问来源于stack exchange,提问作者user2246242
相关产品推荐
相关产品推荐

