正则表达式分裂多行

时间:2013-04-30 20:12:51

标签: python regex split

当括号内的文本跨越多行时,以下按模式的出现拆分字符串的函数不起作用:

import re
def header(text):
    authors = [i.strip() for i in re.split(r'\\and|\\thanks\{.*?\}', text, flags=re.M)]
    names = filter(None,authors)
    return '{} and {}'.format(', '.join(names[:-1]), names[-1])

print header(r"""John Bar \and Tom Foo\thanks{Testing if this works with 
multiple lines} \and Sam Baz""")

我不知道正则表达式是错误还是我在split函数中使用了错误的标记。

2 个答案:

答案 0 :(得分:2)

re.M用于多行字符串中的锚点。您想要的是re.S,这会使.与换行符匹配。

答案 1 :(得分:2)

您应该使用re.DOTALL标志:

re.S
re.DOTALL
  

制作'。'特殊字符匹配任何字符,包括       换行;没有这个标志,'。'将匹配除换行符之外的任何内容。