Я думаю, что мой вопрос в значительной степени говорит сам за себя, но все же я бы опубликовал пример для большей ясности.
У меня есть следующий полностью рабочий скрипт для комментирования/раскомментирования строк в файле Javascript, открытом в редакторе Gedit.
#! /usr/bin/env python
import sys
import StringIO
block = sys.stdin.read()
block = StringIO.StringIO(block)
msg = ''
for line in block:
if "//~" in line:
line = line.replace('//~','')
msg = "All lines in selection uncommented"
else:
line = "//~" + line
msg = "All lines in selection commented"
sys.stdout.write(line)
exit(msg)
Теперь я хочу поставить //~
перед фактическим началом строки (не пробелами или табуляциями, а когда действительно начинается строка, то есть символы и строки).
Если я сделаю это с модулем регулярного выражения, как показано ниже, то он дважды добавит //~
, что означает как начало строки, так и фактическое начало строки.
#! /usr/bin/env python
import sys
import StringIO
import re
block = sys.stdin.read()
block = StringIO.StringIO(block)
msg = ''
for line in block:
if "//~" in line:
line = re.sub(r"(\s*)(\S.*)", r"\1//~\2", line)
line = line.replace('//~','')
msg = "All lines in selection uncommented"
else:
line = re.sub(r"(\s*)(\S.*)", r"\1//~\2", line)
line = "//~" + line
msg = "All lines in selection commented"
sys.stdout.write(line)
exit(msg)
Как я могу сделать это с/без Regex в python?
line.lstrip()
, в RE запустите его сr'^\s*'
- person cdarke   schedule 28.06.2016