python - 名为条件前瞻的正则表达式(Python 中)

标签 python regex conditional-statements named regex-lookarounds

我希望根据字符串后面是否存在某个字符 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/

相关文章:

delphi - 在 Delphi 上断点的 Eval 表达式上混合字符串和数字

python - 从 csv 文件中以嵌套的字典格式分别计算男性和女性

python - "^="在Python中是什么意思?

python - 将 Excel 工作表添加到工作簿末尾

php - ABAB 中的正则表达式匹配数(必须相同)

C - 条件跳转(valgrind)

javascript - 在经过一段时间或满足条件后运行代码

python - 将列添加到 python pandas 中的数据框

regex - 捕获两个空格之间的数字 (RegEx)

Python 电话号码正则表达式