正则表达式,1)调用最后一个匹配组 2)匹配一行中的确切单词(不是一行中的部分匹配)

Regex, 1) call last matching group 2) match exact word in a line( not partially matching in a line)

UiPath 基础正则表达式 - 我正在尝试在 UiPath 中找到匹配

(1) 最后匹配组

(2) 整行匹配(不是一行中的部分匹配)

原始数据 (此数据只是完整数据的一部分)

MAT year 2019
MAT year 2020
MAT year 2021
year 2016
year 2017
year 2018

预期结果(1) MAT year 2021

预期结果 (2)

year 2017
year 2018
year 2019

ps#不包括前三行的年份

year 2019
year 2020
year 2021

解决方法(一)我试过:

从每个循环直到最后一个循环获取索引变量,以及 RawData(IndexVariable).ToString

(不工作,如果 RawData(2).ToString 然后工作,但并非所有时间都是索引 2)

(1) 的正则表达式:MAT 到 (\d\d|\d)/(\d\d|\d)/\d\d\d\d

解决方法(二)我试过:

(2) 的正则表达式:Year\s\d\d\d\d

and (?!mat)(Year\s\d\d\d\d) #PS 不行,往前看

备注:^和$也试过了,但是这只匹配第一行或最后一行,而不是所有的起始行。

我猜你想要的表达方式可能是:

^MAT\syear\s\d{4}(?=(?:\s*year\s\d{4}))$|^(?!MAT\s)year\s\d{4}$

Demo


如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些示例输入。


正则表达式电路

jex.im 可视化正则表达式:

经过超长的调查过程,我最终确定了适合我的案例的答案以及来自@Emma 的查询 2 的解决方案,

查询 1 解决方案的说明:对于我进行的每个查询,获取最后一个匹配条件,所有以 MAT 开头的短语必须组合在一起,不能混合如下所示:

MAT year 2012
year 2019
MAT year 2322

解决方案:

^MAT(?:.(?!\nMAT))+$

我试图从 MAT 开始读取,而下一行不是以 MAT 开头。

查询二的解决方案,只在行中选择完全匹配。

^year\s\d{4}$

以年份开始,以\d结束4次的行

另外,向@Emma 学习,将两个查询合并为 1,其中添加 |对于这两个查询。这样运行一次就可以获得手头的两个价值

^MAT(?:.(?!\nMAT))+$|^year\s\d{4}$