Regex 如何在多个捕获组中使用前向和后向

Regex 如何在多个捕获组中使用前向和后向,regex,regex-group,Regex,Regex Group,我正在尝试使用正向的lookahead和lookahead来提取括号之间的数据,我需要使用与括号数量相同的捕获组数量。我面临的问题是,当我尝试使用多个捕获组时,没有匹配项,但如果我只使用一个组,则效果很好。我必须对正则表达式进行哪些更改才能使其与适当的数据匹配。与数据一起使用的正则表达式是。我想在AWS Athena中使用它从我的S3 bucket对象读取数据 我尝试过各种其他方法,但最终还是选择了使用lookahead和lookahead的方法,因为它可以确保不捕获括号 ((?<=VER

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

我尝试过各种其他方法,但最终还是选择了使用lookahead和lookahead的方法,因为它可以确保不捕获括号

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

((?如果要匹配其中一个,可以添加一个管道
|
,这意味着两个部分之间的交替,并在捕获组之外进行观察

请注意,您不必在character类中转义
=

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

在不使用lookarounds的情况下执行正则表达式的第二个选项中,如果其中一个字段不总是存在,比如说UUID是可选的,我该如何处理。@ChanduRaman如果第二个字段可以是可选的,你可以使用可选组。另外,我在AWS Athena中尝试过这个选项,它使用正则表达式,但出于某种原因,所有列的值都是becoming null。你知道这是什么原因吗?而且管道功能也不适用于AThena@ChanduRaman您是否尝试对反斜杠进行双转义?
String regex=“VERS=\\([^)]+)\\;UUID=\\([^)]+)\\;”
当我读is开头时说
如果一行与正则表达式不匹配,那么该行中的所有列都将为空
你确定有匹配项吗?我使用了双转义反斜杠,因为如果没有它,我会得到另一个错误。当他们说一行需要匹配时,我不是他们的确切意思,因为我的数据行有14个参数,其中10个参数需要匹配,其余的列名不在数据中,因此我使用了您建议的可选捕获。
VERS=\(([^)]+)\);UUID=\(([^)]+)\);