每行编译一个带有一个模式的正则表达式

时间:2015-12-30 15:38:41

标签: python regex python-2.7

我有多种模式需要检查。说hellobye,但会更多,所以我选择使用re.compile()来存储它们,然后才能检查这个正则表达式:

import re

mypatt = re.compile(r'(hello|bye)', re.IGNORECASE)
url = ["bye bye", "hello how are you", "i am fine", "ok byeee"]
for u in url:
    if mypatt.search(u):
        print "yes --> %s" %(u)

运行此代码后,我得到了所需的输出:

yes --> bye bye
yes --> hello how are you
yes --> ok byeee

但是,由于有多种模式,我想每行写一个,例如:

mypatt = re.compile(r'(\
    hello|\
    bye\
    )', re.IGNORECASE)

然而,这不起作用,我无法理解为什么。编写这样的语句的方法是什么,将每个模式写在不同的行中?

1 个答案:

答案 0 :(得分:3)

您正在创建一个模式,其中包含每行开头的空格。为避免这种情况,请:

  1. 使用textwrap.dedent,删除多行字符串中每行的公共前导空格;或

  2. 添加re.VERBOSE (or re.X)标志以忽略未转义的空格,并允许添加内联注释。