2014-03-03 39 views
4

我有如下字符串列表:掌握新行字符

s = 'hello\n this is\n a forum\n' 

,我使用正则表达式来获取每个字符的每个单人/双人发生。我想生成作为li = [ 'h','e','ll','o','\n','t','h'....]

我用

pattern = re.compile(r'(.)\1?' , re.IGNORECASE) 
newList = [m.group() for m in pattern.finditer(s)] 
print newList 

但是,这给了我newList= [ 'h','e','ll','o','t','h'....],在这里我无法得到的“\ n”新行存储的字符的列表。我应该如何改变我的模式以获得列表中的'\ n'?

回答

4

使用re.DOTALL标志这样

pattern = re.compile(r'(.)\1?' , re.IGNORECASE | re.DOTALL) 

从文档报价,

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

我宁愿itertools.groupby做到这一点

from itertools import groupby 
print ["".join(grp) for char, grp in groupby(s)]