【发布时间】:2013-07-07 22:41:00
【问题描述】:
我希望根据字符串后面是否出现某个字符块来不同地匹配字符串的开头。一个非常简化的版本是:
re.search("""^(?(pie)a|b)c.*(?P<pie>asda)$""", 'acaaasda')
如果匹配<pie>,我想在字符串的开头看到a,如果不是,那么我宁愿看到b。
我会使用正常的数字前瞻,但无法保证这两个组之间将匹配或不匹配多少组。
我目前收到error: unknown group name。我的直觉告诉我,这是因为我想要的是不可能的(预测命名组并不完全是 regular 语言解析器的功能),但我真的真的很想要这可以工作——另一种方法是放弃 4 或 5 小时的正则表达式编写,并在明天将其全部重做为递归下降解析器或其他东西。
提前感谢您的帮助。
【问题讨论】:
-
你在搜索/解析什么样的文本?
-
你想达到什么目的?我在您的字符串中没有看到任何
pie。您能提供一些带有相应输出的示例输入吗? -
你能发布你真正想要的文字吗?
-
粘贴似乎会破坏格式并超出字符限制。但我得到的是我有一个数量,
(?P<amt>%s|[0-9]*\.?[0-9]+|([0-9]+\s+)?[0-9]+\/[0-9]+),(其中 %s 是one、two、a等)一个度量单位,然后是一些其他的东西。但是,如果您有一个部分结构,则不必存在数量,例如“一小撮盐”或“苦艾酒的香气”。由于我使用它来对行进行分类和解析,因此我也必须抓住它们,以免它们被视为instruction或name而不是ingredient_line。
标签: python regex conditional named lookahead