Я разбираю исходный код Python, и у меня есть регулярные выражения для одиночных и двойных кавычек (полученные путем чтения ответа ridgerunner на this thread).Regex для сопоставления многострочной строки Python с экранированными символами
single_quote_re = "'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'";
double_quote_re = '"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"';
Я пытаюсь обрабатывать многострочные строки Python сейчас (три двойных кавычки).
s = '"""string one\'s end isn\'t here; \\""" it\'s here """ """string two here"""'
# correct output for findall should be:
# ['string one\'s end isn\'t here; \\""" it\'s here ','string two here']
Я попытался немного пообщаться с ним, но все же это неправильно.
multiline_string_re = '"""([^(""")\\\\]*(?:\\\\.[^(""")\\\\]*)*)"""'
Там же должен быть какой-то способ сказать «»», что сразу не предшествует обратный слэш (другими словами, первые двойные кавычки не убежали)
EDIT:. Я должен быть ближе, я попытался следующие:
r'(?<!\\)""".*(?<!\\)"""'
# Matches the entire string; not what I'm going for.
r'(?<!\\)"""[^((?<!\\)""")](?<!\\)"""'
# Matches that space between the two strings ('""" """') in the sample string s (see code above, prior to edit).
r'(?<!\\)"""([^((?<!\\)""")]*(?:\\.[^((?<!\\)""")]*)*)(?<!\\)"""'
# Same result as before, but with the triple quotes shaved off (' ').
# Note: I do indeed want the triple quotes excluded.
UPDATE:
решение, благодаря SLn, по-видимому, "" "[^" \\]
(:(? : \\ | "") [^ "\\]) *" ""
multiline_string_re = '"""[^"\\\\]*(?:(?:\\\\.|"")[^"\\\\]*)*"""'
re.findall(multiline_string_re, s, re.DOTALL)
# Result:
# ['"""string one\'s end isn\'t here; \\""" it\'s here """', '"""string two here"""']
Обновленное решение, еще раз спасибо SLn:.
multiline_single_re = "'''[^'\\\\]*(?:(?:\\\\.|'{1,2}(?!'))[^'\\\\]*)*'''"
multiline_double_re = '"""[^"\\\\]*(?:(?:\\\\.|"{1,2}(?!"))[^"\\\\]*)*"""'
' "" ", которому не сразу предшествует обратная косая черта ':' (? tenub
Если его сеть Vebatim ala Dot @ "", то нет escape char \\. То есть. '" string \\ "' -> '@" "" string \\ "" "'. Это так, как в Dot-net. Разница в питоне? – sln
@sln: AFAIK, дословный формат с python выглядит так: 'r '....'' –