首页 > 解决方案 > 正则表达式 - 匹配括号之间的引号

问题描述

示例字符串:

cov('年龄', ['5','7','9'])

我有这个与引号内的值匹配的正则表达式:

(["'])(?:(?=(\\?))\2.)*?\1

我正在尝试将其修改为仅使用前瞻/后视从示例字符串返回方括号内的引号:

(?<=\[)(["'])(?:(?=(\\?))\2.)*?\1(?=\])

但它匹配方括号内的所有内容。

我怎样才能只匹配没有逗号的引号,就像第一个正则表达式一样,但在方括号内?

编辑。

语言是.NET。

标签: .netregex

解决方案


如果支持,一个选项是使用\G锚点和捕获组:

(?:\[|\G(?!^))('[^']+'),?(?=[^\]]*\])

在零件

  • (?:非捕获组
  • \[比赛开幕[
    • |或者
    • \G(?!^)在上一场比赛结束时断言位置
  • )关闭非捕获组
  • (捕获组 1
    • '[^']+'匹配',除 之外的任何字符 1 次以上,然后再次'匹配'
  • )关闭组 1
  • ,?匹配一个可选的,
  • (?=[^\]]*\])积极前瞻,断言结束]

正则表达式演示| C# 演示

例如

string pattern = @"(?:\[|\G(?!^))('[^']+'),?(?=[^\]]*\])";
string input = @"cov('Age', ['5','7','9'])";

var results = Regex.Matches(input, pattern)
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToArray();

foreach(string result in results)
{
    Console.WriteLine(result);
}

输出

'5'
'7'
'9'

推荐阅读