名为conditional lookahead的Regex(在Python中)

2024-10-02 08:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望根据字符串后面是否存在某个字符块来匹配字符串的开头。一个非常简单的版本是:

re.search("""^(?(pie)a|b)c.*(?P<pie>asda)$""", 'acaaasda')

其中,如果<pie>匹配,我希望在字符串的开头看到a,如果不是,那么我宁愿看到{}。在

我会使用普通的数字前瞻,但不能保证有多少组将或不会匹配这两个。在

我现在得到{}。我内心的失落感告诉我,这是因为我想要的是不可能的(前瞻命名组并不是一个常规语言解析器的一个特性),但我真的真的很想让它奏效——另一种选择是放弃4到5个小时的regex编写,明天再把它作为递归下降解析器之类的东西来做。在

提前谢谢你的帮助。在


Tags: 字符串版本re解析器search数字字符pie
2条回答

你可以用这样的方法:

^(?:a(?=c.*(?P<pie>asda)$)|b)c.*$

如果您不需要,也可以不使用.*$。在

不幸的是,我不认为有一种方法可以对命名组执行您想要的操作。如果您不介意重复太多,可以将共享条件和OR表达式复制在一起:

^(ac.*asda|bc.*)$

如果它是一个复杂的表达式,您可以始终使用字符串格式来共享它(而不是复制粘贴共享部分):

^{pr2}$

相关问题 更多 >

    热门问题