【问题标题】:python regex findall and multilinepython 正则表达式 findall 和多行
【发布时间】:2012-08-14 18:43:28
【问题描述】:

python 2.6.8

s= '''
foo 
bar
baz
'''
>>>re.findall(r'^\S*',s,re.MULTILINE)
['', 'foo', 'bar', 'baz', '']
>>>ptrn = re.compile(r'^\S*',re.MULTILINE)
>>>ptrn.findall(s)
['', 'foo', 'bar', 'baz', '']
>>>ptrn.findall(s,re.MULTILINE)
['baz', '']

为什么在 findall 中使用 MULTILINE 标志有区别?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    在正则表达式对象上调用findall() 方法时,第二个参数不是flags 参数(因为在编译正则表达式时已经使用过)而是pos 参数,告诉正则表达式引擎在哪个指向字符串开始匹配。

    re.MULTILINE 只是一个整数(恰好是8)。

    见the docs。

    【讨论】:

    • 好悲痛。你以 30 秒的优势击败了我,并且已经获得了 4 票。我永远不会成为 FGITW :-)
    • 从不检查 re.MULTILINE 是对象还是 int
    【解决方案2】:

    因为编译对象ptrn的findall方法不带MULTILINE参数。它需要一个position 参数。

    请看这里:http://docs.python.org/library/re.html#re.RegexObject.findall

    MULTILINE 说明符仅在您调用 re.compile() 时使用,生成的 ptrn 对象已经“知道”它是 MULTILINE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2015-08-13
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2013-07-10
      相关资源
      最近更新 更多