Regex 通过扩展现有正则表达式在匹配项中进行匹配

Regex 通过扩展现有正则表达式在匹配项中进行匹配,regex,filter,grouping,extending,Regex,Filter,Grouping,Extending,我试图通过在匹配项中预先添加或附加另一个正则表达式来扩展现有的任意正则表达式 以以下为例: 原始正则表达式是cat | car | bat,因此匹配的输出是 cat car bat 我想添加到这个正则表达式中,只输出以“ca”开头的匹配项 cat car 我特别不想解释整个正则表达式,这可能是一个相当长的操作,然后更改其内部内容以匹配生成的输出,如中所示: ^ca[tr] 或者运行原始正则表达式,然后在结果上运行第二个正则表达式。我将原始正则表达式作为python中的参数,但希望通过添加附加

我试图通过在匹配项中预先添加或附加另一个正则表达式来扩展现有的任意正则表达式

以以下为例:

原始正则表达式是
cat | car | bat
,因此匹配的输出是

cat
car
bat
我想添加到这个正则表达式中,只输出以“ca”开头的匹配项

cat
car
我特别不想解释整个正则表达式,这可能是一个相当长的操作,然后更改其内部内容以匹配生成的输出,如中所示:

^ca[tr]

或者运行原始正则表达式,然后在结果上运行第二个正则表达式。我将原始正则表达式作为python中的参数,但希望通过添加附加代码来“预过滤”匹配项

这可能是对正则表达式的轻微滥用,但如果可能的话,我仍然感兴趣。我已经尝试了我所知道的子群和下面的例子,但是他们没有给我我需要的

我尝试过的事情:

^ca(cat|car|bat)
(?<=ca(cat|car|bat))
(?<=^ca(cat|car|bat))
^ca(cat汽车蝙蝠)

(?您的尝试离您不远,只是您不需要一个lookback,而是一个lookahead断言,括号放错了位置。正确的做法是:将原始模式放在括号中,并在前面加上
(?=ca)


在第二个示例中(没有
|
备选方案),不需要原始模式周围的括号。

好的,多亏了@Armali,我得出了(?=ca)(^[a-z]{4}$)有效的结论(请参阅).但是,我正在尝试使用伟大的exrex工具来生成匹配字符串,它生成的匹配长度为6个字符而不是4个字符。这可能是exrex的限制,而不是regex,这在其他情况下似乎是有效的

见@Nick的评论


我还为此在exrex GitHub上提出了一个问题。

谢谢。它看起来很接近我需要的,但例如,第二个解决方案导致cabcdefg匹配,但我只在匹配[a-z]{4}的字符串中查找结果,即4个字符长。您需要添加锚(
^
$
)到正则表达式的开始和结束谢谢Nick。看起来我们是同时到达的,但是。我会把这个标记为正确答案。
(?=ca)(cat|car|bat)
(?=ca)([a-z]{4})