2024-10-02 08:18:34 发布
网友
我希望根据字符串后面是否存在某个字符块来匹配字符串的开头。一个非常简单的版本是:
re.search("""^(?(pie)a|b)c.*(?P<pie>asda)$""", 'acaaasda')
其中,如果<pie>匹配,我希望在字符串的开头看到a,如果不是,那么我宁愿看到{}。在
<pie>
a
我会使用普通的数字前瞻,但不能保证有多少组将或不会匹配这两个。在
我现在得到{}。我内心的失落感告诉我,这是因为我想要的是不可能的(前瞻命名组并不是一个常规语言解析器的一个特性),但我真的真的很想让它奏效——另一种选择是放弃4到5个小时的regex编写,明天再把它作为递归下降解析器之类的东西来做。在
提前谢谢你的帮助。在
你可以用这样的方法:
^(?:a(?=c.*(?P<pie>asda)$)|b)c.*$
如果您不需要,也可以不使用.*$。在
.*$
不幸的是,我不认为有一种方法可以对命名组执行您想要的操作。如果您不介意重复太多,可以将共享条件和OR表达式复制在一起:
OR
^(ac.*asda|bc.*)$
如果它是一个复杂的表达式,您可以始终使用字符串格式来共享它(而不是复制粘贴共享部分):
你可以用这样的方法:
如果您不需要,也可以不使用
.*$
。在不幸的是,我不认为有一种方法可以对命名组执行您想要的操作。如果您不介意重复太多,可以将共享条件和
OR
表达式复制在一起:如果它是一个复杂的表达式,您可以始终使用字符串格式来共享它(而不是复制粘贴共享部分):
^{pr2}$相关问题 更多 >
编程相关推荐