如何在多个捕获组中使用先行和后行

时间:2019-07-26 21:52:53

标签: regex regex-group

我正在尝试使用正向和反向查找来提取括号之间的数据,并且我需要使用与括号数量相同的捕获组数。我面临的问题是,当我尝试使用多个捕获组时,没有匹配项,但是如果我仅使用一个捕获组,则工作正常。我必须对正则表达式进行哪些更改以使其与适当的数据匹配。我与数据一起使用的正则表达式为here。我想在AWS Athena中使用它从我的S3存储桶对象中读取数据。

我尝试了其他各种方法,但是先行确定了此方法,因为它确保不捕获括号。

((?<=VERS\=\()[^\)]*(?=\)))((?<=UUID\=\()[^\)]*(?=\)))

预期结果是,第一个捕获组从第一个括号捕获数据,第二个捕获组从第二个括号捕获数据。

1 个答案:

答案 0 :(得分:0)

如果要匹配其中任何一个,则可以添加管道|,这意味着两个部分之间是交替的,并在捕获组之外进行环视。

请注意,您不必在字符类内转义=)

(?<=VERS=\()([^)]*)(?=\))|(?<=UUID=\()([^)]*)(?=\))
                         ^   

Regex demo

除了使用环顾四周之外,您还可以匹配以下两个部分:

VERS=\(([^)]+)\);UUID=\(([^)]+)\);

Regex demo