моя точка зрения заключалась в том, что отказ от использования положительного взгляда может сделать код более читабельным
ОК.Хотя лично я не нахожу это менее читабельным.Это дело вкуса.
В вашем редактировании:
Во-первых, (? M) не требуется, поскольку для строки вifp: выбирает по одной строке за раз, поэтому в конце каждой строки указывается только одна новая строка
Во-вторых, $ в том виде, в котором она размещена, не имеет никакой полезности, потому что он всегда будет соответствовать концу строки строки.
В любом случае, принимая вашу точку зрения, я нашел два способа избежать утверждения о взгляде сзади:
with open(sys.argv[1]) as ifp:
with open("output.txt", "w") as ofp:
for line in ifp:
ante_newline,lower_last = re.match('(.*?([a-z])?$)',line).groups()
ofp.write(ante_newline+' ' if lower_last else line)
и
with open(sys.argv[1]) as ifp:
with open("output.txt", "w") as ofp:
for line in ifp:
ofp.write(line.strip('\r\n')+' ' if re.search('[a-z]$',line) else line)
вторая лучше: только одна строка, простое соответствие для проверки, нет необходимости в группах (), естественно логика
РЕДАКТИРОВАТЬ: оЯ понимаю, что этот второй код - просто ваш первый код, переписанный в одну строку, Longair