如何在多个捕获组中使用前瞻和后视
How to use lookahead and lookbehind in more than one capturing group
我正在尝试使用正向前瞻和后视来提取括号之间的数据,我需要使用与括号数量相同的捕获组。我面临的问题是当我尝试使用多个捕获组时没有匹配项,但如果我只使用一个组则它工作正常。我必须对我的正则表达式进行哪些更改才能使其匹配适当的数据。我与数据一起使用的正则表达式是 here。我想在 AWS Athena 中使用它从我的 S3 存储桶对象中读取数据。
我尝试了各种其他方法,但最终选择了前瞻和后视的方法,因为它确保不捕获括号。
((?<=VERS\=\()[^\)]*(?=\)))((?<=UUID\=\()[^\)]*(?=\)))
预期结果是第一个捕获组从第一个括号中捕获数据,第二个捕获组从第二个括号中捕获数据。
如果你想匹配其中任何一个,你可以添加一个管道 |
这意味着两个部分之间的交替并在捕获组之外进行环视。
请注意,您不必转义字符 class.
中的 =
和 )
(?<=VERS=\()([^)]*)(?=\))|(?<=UUID=\()([^)]*)(?=\))
^
除了使用环顾四周,您还可以匹配以下 2 个部分:
VERS=\(([^)]+)\);UUID=\(([^)]+)\);
我正在尝试使用正向前瞻和后视来提取括号之间的数据,我需要使用与括号数量相同的捕获组。我面临的问题是当我尝试使用多个捕获组时没有匹配项,但如果我只使用一个组则它工作正常。我必须对我的正则表达式进行哪些更改才能使其匹配适当的数据。我与数据一起使用的正则表达式是 here。我想在 AWS Athena 中使用它从我的 S3 存储桶对象中读取数据。
我尝试了各种其他方法,但最终选择了前瞻和后视的方法,因为它确保不捕获括号。
((?<=VERS\=\()[^\)]*(?=\)))((?<=UUID\=\()[^\)]*(?=\)))
预期结果是第一个捕获组从第一个括号中捕获数据,第二个捕获组从第二个括号中捕获数据。
如果你想匹配其中任何一个,你可以添加一个管道 |
这意味着两个部分之间的交替并在捕获组之外进行环视。
请注意,您不必转义字符 class.
中的=
和 )
(?<=VERS=\()([^)]*)(?=\))|(?<=UUID=\()([^)]*)(?=\))
^
除了使用环顾四周,您还可以匹配以下 2 个部分:
VERS=\(([^)]+)\);UUID=\(([^)]+)\);