在2个模式python之间找到一个字符串

时间:2014-06-30 15:20:53

标签: python regex pattern-matching

所以我一直在学习python中的正则表达式,而且我已经学到了很好的东西,还有一些我无法弄清楚的东西。我有一个字符串列表。在该列表中,一些以“What”开头,一些以“How”开头,它们都以'?'结尾。我希望String列表的所有子字符串都以'What'开头。

这是我尝试过的模式:

pat = 'what + \w + \w + \w + ?'

但主要问题是两者之间的字数不固定。有些有3个,有些甚至有11 - 12,如果我在正则表达式中使用or子句或if子句,它会变成一个没有结果的巨大模式。关于如何解决这类问题的任何建议?

2 个答案:

答案 0 :(得分:0)

你不需要重新。

 l = ["What blah foo?","What bar?","How blah foo?","How bar?"]

print [x for x in l if x.startswith("What")]

['What blah foo?', 'What bar?']

使用re:

l = ["What blah foo?","And What bar?","what bar?","How blah foo?","How bar?","What other foo","How other foo"]
for s in l:
    check= re.findall("^What .*\?",s,re.IGNORECASE) # find string starting with "What/what" and ending with "?"
    if check:
        print check[0]
What blah foo?
what bar?

答案 1 :(得分:0)

使用re和list comprehension的另一种方法:

list = ["What blah foo?","what bar?","How blah foo?","How bar?","another What?", "some what"]

print [x for x in list if re.match(r'^what.*?', x, re.I)]
  

['什么blah foo?','什么酒吧?']