Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式命名的条件前瞻(Python中)_Python_Regex_Conditional_Named_Lookahead - Fatal编程技术网

正则表达式命名的条件前瞻(Python中)

正则表达式命名的条件前瞻(Python中),python,regex,conditional,named,lookahead,Python,Regex,Conditional,Named,Lookahead,我希望根据字符串后面是否存在某个字符块,以不同的方式匹配字符串的开头。一个非常简化的版本是: re.search("""^(?(pie)a|b)c.*(?P<pie>asda)$""", 'acaaasda') re.search(“^(?(pie)a | b)c.*(.Pasda)$”,“acaasda”) 其中,如果匹配,我希望在字符串开头看到a,如果不匹配,我希望看到b 我会使用普通的数字前瞻,但不能保证有多少组会或不会在这两个组之间匹配 我当前收到错误:未知组名。我内心深

我希望根据字符串后面是否存在某个字符块,以不同的方式匹配字符串的开头。一个非常简化的版本是:

re.search("""^(?(pie)a|b)c.*(?P<pie>asda)$""", 'acaaasda')
re.search(“^(?(pie)a | b)c.*(.Pasda)$”,“acaasda”)
其中,如果
匹配,我希望在字符串开头看到
a
,如果不匹配,我希望看到
b

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

我当前收到
错误:未知组名
。我内心深处的沮丧感告诉我,这是因为我想要的是不可能的(前瞻命名组并不是常规语言解析器的一个功能),但我真的很想让它起作用——另一种方法是放弃4到5个小时的正则表达式编写,明天作为递归下降解析器或其他什么东西重新编写


提前感谢您的帮助

不幸的是,我认为没有一种方法可以处理命名组。如果不介意重复太多,可以将共享条件和
表达式一起复制:

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


您可以使用类似的方法:

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

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

您正在搜索/解析什么类型的文本?您希望实现什么?我在你的字符串中没有看到任何
馅饼。你能用相应的输出输入一些样本吗?你能用你想要的东西发布你的真实文本吗?粘贴似乎破坏了格式,而且不管怎样都超过了字符限制。但我想说的是,我有一个量,
(P%s[0-9]*.?[0-9]++([0-9]+\s+)[0-9]+\/[0-9]+)
,(其中%s是
1
2
a
,等等)一个度量单位,然后是其他一些东西。如果你有一个部分结构,比如“一撮盐”或“苦艾酒的香气”,那么数量就不必存在。因为我用它来对行进行分类和解析,所以我也要抓住它们,以免它们被认为是
指令
名称
,而不是
成分行
。我想这就是我最终可能要做的。我还想到,我可能只需要重写一些其他正则表达式,以便它们需要向后查看
amt
名称(请参见上面的代码片段)。
^(?:a(?=c.*(?P<pie>asda)$)|b)c.*$