我有这个文件
line 1
line 2
line 3
line 4
line 5
line 6
我怎么能从line 1
到line 3
?
我试过了:
print re.match(r'(.*)^$', lines, re.MULTILINE).groups()
但我得到:
AttributeError: 'NoneType' object has no attribute 'groups'
我不会为此使用正则表达式。遍历行并在空白处停止或仅split
将整个内容'\n\n'
用作定界符要干净得多(IMO)。与使用复杂的正则表达式相比,我更喜欢它,因为split
当您在六个月后返回此代码时,阅读起来会更加直观。
s = '''line 1
line 2
line 3
line 4
line 5
line 6'''
lines = []
for line in s.split('\n'): # just for line in file if you're reading from a file
if line:
lines.append(line)
else: # Empty line: stop looking
break
print(lines) # >>> ['line 1', 'line 2', 'line 3']
print(s.split('\n\n')) # >>> ['line 1\nline 2\nline 3', 'line 4\nline 5\nline 6']
添加re.DOTALL标志以使点也匹配换行符:
>>> print re.match(r'(.*)^$', lines, re.MULTILINE | re.DOTALL).groups()
('\nline 1\nline 2\nline 3\n',)
从视觉上看,如果你想在“空白”行之前排成一行,这个正则表达式应该可以做到。
它根本不需要修饰符。
// (?:[^\S\n]*(?:\S+[^\S\n]*)+(?:\n|$))+
(?:
[^\S\n]*
(?: \S+ [^\S\n]* )+
(?: \n | $ )
)+