2013-04-30 72 views
1

下面的函數,它由一個模式的出現將字符串分割不工作時,括號內文字跨多行:正則表達式分割多行

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

re.M用於錨定多行字符串。你想要的是re.S,這使得.匹配換行符。

2

你應該使用re.DOTALL標誌:

re.S 
re.DOTALL 

充分利用 ''特殊字符完全匹配任何字符,包括 換行符;沒有這個標誌,'。'將匹配除換行符之外的任何內容。