【问题标题】:Find expression delimited by known strings查找由已知字符串分隔的表达式
【发布时间】:2013-07-29 21:53:05
【问题描述】:

我希望列出包含在表达式“cat_”和“dog”之间的元素 在一个看起来像这样的字符串中:

input=...snake_perrot_cat_expression dog...
output='expression'

我想要返回“表达式”。我尝试使用正则表达式,但我缺乏知道如何正确编写它的经验......

identifi=[]
for line in file:
    identi=re.findall(r'cat_.*?dog', line)
    identifi.append(identi)

它返回一个空列表...欢迎任何帮助。

【问题讨论】:

  • 请注意,您初始化了一个名为identifi 的列表,但您将其附加到名为indentifi 的内容上。这可能是问题吗? (太多相似的变量名是一个编程陷阱……)
  • @unutbu 抱歉,这在原始版本中不存在...只是我在这里写下的一个错字。
  • @JonClements 谢谢,我不知道这个问题在我浏览 SO 时是如何逃脱的。

标签: python regex python-3.x


【解决方案1】:

在要查找的模式周围加上括号:

    indentifi.extend(re.findall(r'cat_(.*?)dog', line))

例如,

In [137]: import re

In [138]: line = '...snake_perrot_cat_expression dog...'

In [142]: re.findall(r'cat_(.*?)\s*dog', line)
Out[142]: ['expression']

(添加了\s*,因此不会匹配尾随空格。)

【讨论】:

  • 你是我的英雄...谢谢,感谢你,我学到了一些关于重新的新知识。
【解决方案2】:

如果每行只有一个“猫”和“狗”,并且“猫”排在第一位,我可以建议一个不使用正则表达式的解决方案:

print inpu.split('cat_')[1].split('dog')[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多