0

我有一个像这个注释间隙代表新行的文件。

Hello World )
    ;

Hello World ) ;

Hello World )
;

我写了一个小python脚本来将分号移动到上一行的末尾

with open(path) as f:
    prev_line =''
    for current_line in f:
        matched = re.match('[^(.+)];',current_line,re.MULTILINE)
        if matched is not None:
            current_line = re.sub('[^(.+)];','',current_line,re.MULTILINE)
            prev_line = re.sub(r'^(.+)$',r'\1 ;',prev_line,re.MULTILINE)
        print prev_line.strip()
        prev_line = current_line.strip()

除了缺少分号的最后一行之外,我得到了预期的输出

Hello World ) ;





Hello World ) ;



Hello World ) **semicolon is missing here**
4

3 回答 3

3

您应该尝试使用\s*

>>> import re 
>>> s = '''Hello World )   
...         ;'''
>>> re.sub(r'\s*;', ';', s)
'Hello World );'

\s*;匹配任意数量的空格(包括换行符),后跟分号。

此外,re.sub()适用于该模式的任意数量的实例,因此您可以执行以下操作:

with open(path) as f:
    fixed = re.sub(r'\s*;', ';', f.read())
于 2012-11-07T07:44:20.680 回答
0
with open('path/to/file') as infile:
    lines = infile.readlines()

if lines[-1].strip() == ';':
    lines.pop()
if lines[-1].strip()[-1] != ';'
    lines[-1] = lines[-1].rstrip() + ';'

with open('path/to/file', 'w') as outfile:
    outfile.write(''.join(lines))

希望这可以帮助

于 2012-11-07T07:46:26.283 回答
0

如果分号总是在它自己的行上,你应该能够通过遍历文件来找到它,然后你可以将它添加到上一行的末尾,如下所示:

file = open(path, 'r')
lines = file.readlines()
for line in lines:
  if ';' in line:
    lines[lines.index(line)-1] += line
    lines.remove(line)

脚注:不确定是否要保留“;”前面的空格。我只是把最简单的解决方案放在一起。

于 2012-11-07T07:55:57.773 回答