我希望根据字符串后面是否存在某个字符 block 来以不同方式匹配字符串的开头。一个非常简化的版本是:
re.search("""^(?(pie)a|b)c.*(?P<pie>asda)$""", 'acaaasda')
哪里,如果<pie>
已匹配,我要看a
在字符串的开头,如果不是,那么我宁愿看到 b
。
我会使用正常的数字前瞻,但不能保证这两者之间有多少组会匹配或不会匹配。
我目前正在获取error: unknown group name
。我的直觉告诉我,这是因为我想要的东西是不可能的(对命名组的前瞻并不完全是常规语言解析器的功能),但我真的真的真的想要这是可行的——另一种方法是放弃 4 或 5 小时的正则表达式编写,明天将其作为递归下降解析器或其他东西重做。
预先感谢您的帮助。
最佳答案
不幸的是,我认为没有办法可以对命名组执行您想要执行的操作。如果您不介意重复太多,您可以将共享条件和OR
表达式一起复制:
^(ac.*asda|bc.*)$
如果它是一个复杂的表达式,您始终可以使用字符串格式来共享它(而不是复制粘贴共享部分):
common_regex = "c.*"
final_regex = "^(a{common}asda|b{common})$".format(common=common_regex)
关于python - 名为条件前瞻的正则表达式(Python 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563226/