我在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 - 重要流量
这样的东西我需要排除开头“['”。单引号末尾的非捕获组正在工作。
答案 0 :(得分:3)
尝试使用lookbehind断言
$regex = "(?<=\[').*?(?=')"
或:
$regex = "(?:\[\[')(.*?)(?=')"
$yourstring -match $regex
$Matches[1]
答案 1 :(得分:0)
非捕获组(?:\[')
仍包含在表达式的“匹配”部分中,因此在“匹配”中返回。前瞻(例如(?='))和后向匹配不是匹配的部分,而是布尔断言(例如锚点^和$)。从当前字符串位置向前(向前)或向后(向后),它们的模式必须匹配(正向外观)或不匹配(负向外观),但它们仅返回true或false,并且不前进匹配指针。术语“非捕获”是指使用括号来“捕获”整体匹配的可单独检索的小节(块),并且也用于对模式的各个部分进行分组,通常是在将量词(*,+ 、?)应用于其他情况时未分组的部分,例如用|分隔的部分。 “不捕获”组((?:regex))执行分组功能,但不捕获任何内容(也不添加到捕获列表中)。
请注意,@ CB答案中给出的第二个示例并非最小。由于要求是要在[和最后一个'之后立即删除两个'字符之间的文本(后续匹配不需要),因此使用捕获组意味着在[主要比赛是无关紧要的。因此图案可以是
$regex = "\['(.*?)'"