正则表达式 - 非捕获组无效

时间:2013-02-13 20:32:42

标签: regex powershell powershell-v2.0

我在Powershell中使用正则表达式。我有一个非捕获组,但它仍然显示在我的结果中。

字符串是:

Grid1.Data = [['TRE - Significant Flux','EG Report','w939909','59e8a31f-d9e9-4ebf-a027-929ec62953ac'],['CB - Daily OD Report','EG Report','w9
39909','59e8a31f-d9e9-4ebf-a027-929ec62953ac'],['BC - Balance Transfers Daily - DRAFT','BC - Balance Transfers Daily - DRAFT','w939909','59e8
a31f-d9e9-4ebf-a027-929ec62953ac'],['CB - CL Activity Report','CB - CL Activity Report','w939909','59e8a31f-d9e9-4ebf-a027-929ec62953ac']]

正则表达式是:

$regex = "(?:\[').*?(?=')"  

它仍在返回像''TRE - 重要流量

这样的东西

我需要排除开头“['”。单引号末尾的非捕获组正在工作。

2 个答案:

答案 0 :(得分:3)

尝试使用lookbehind断言

$regex = "(?<=\[').*?(?=')"

或:

$regex = "(?:\[\[')(.*?)(?=')"

$yourstring -match $regex

$Matches[1]

答案 1 :(得分:0)

非捕获组(?:\[')仍包含在表达式的“匹配”部分中,因此在“匹配”中返回。前瞻(例如(?='))和后向匹配不是匹配的部分,而是布尔断言(例如锚点^和$)。从当前字符串位置向前(向前)或向后(向后),它们的模式必须匹配(正向外观)或不匹配(负向外观),但它们仅返回true或false,并且不前进匹配指针。术语“非捕获”是指使用括号来“捕获”整体匹配的可单独检索的小节(块),并且也用于对模式的各个部分进行分组,通常是在将量词(*,+ 、?)应用于其他情况时未分组的部分,例如用|分隔的部分。 “不捕获”组((?:regex))执行分组功能,但不捕获任何内容(也不添加到捕获列表中)。

请注意,@ CB答案中给出的第二个示例并非最小。由于要求是要在[和最后一个'之后立即删除两个'字符之间的文本(后续匹配不需要),因此使用捕获组意味着在[主要比赛是无关紧要的。因此图案可以是

$regex = "\['(.*?)'"