расщепление и избежание косой черты в Python - PullRequest
0 голосов
/ 11 октября 2011

У меня есть файл, содержащий регулярные выражения в стиле perl вида /pattern/replace/, который я пытаюсь прочитать в Python как список скомпилированных шаблонов и связанных с ними строк замены. Ниже то, что я сделал до сих пор.

def get_regex(filename):
    regex = []
    fi = open(filename,'r')
    text = [l for l in fi.readlines() if not l.startswith("#")]
    fi.close()
    for line in text:
        ptn, repl = line[1:].split('/')[:-1]
        regex.append((re.compile(ptn), repl))
    return regex

Это прекрасно работает, пока я не получу строки с экранированными косыми чертами, например:

/$/ <\\/a>/

Когда я пытаюсь разбить эту строку, Python возвращает список из трех элементов, ['$', ' <\\', 's>'], а не (как ожидается) ['$', ' <\\/s>']. Есть ли способ заставить replace интерпретировать побеги?

1 Ответ

3 голосов
/ 11 октября 2011

Не совсем, нет.Лучше всего было бы вместо этого использовать re.split() с регулярным выражением, которое использует вид сзади, чтобы убедиться, что косая черта не экранирована, например,

UNESCAPED_SLASH_RE = re.compile(r'(?<!\\)/')
ptn, repl = UNESCAPED_SLASH_RE.split(line[1:])[:-1]
...