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

时间:2019-09-15 02:44:11

标签: regex uipath

UiPath基本正则表达式-我正试图在UiPath中找到匹配项

(1)最后一个比赛组

(2)与整行匹配(部分不匹配)

RawData (此数据只是全部数据的一部分)

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

解决方案(1)我尝试过:

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

(不起作用,如果RawData(2).ToString则起作用,但并非所有时间都为索引2)

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

解决方案(2)我尝试过:

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

和(?!mat)(年\ s \ d \ d \ d \ d)#PS不起作用,请向前看

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

2 个答案:

答案 0 :(得分:1)

我猜您想要的表情可能是:

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

Demo


如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

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

enter image description here

答案 1 :(得分:1)

经过漫长的调查过程,我最终确定了适合我的情况的答案以及来自@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} $