如何在多个捕获组中使用前瞻和后视

How to use lookahead and lookbehind in more than one capturing group

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

我尝试了各种其他方法,但最终选择了前瞻和后视的方法,因为它确保不捕获括号。

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

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

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

请注意,您不必转义字符 class.

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

Regex demo

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

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

Regex demo