РЕДАКТИРОВАТЬ: Этот вопрос на самом деле не имеет смысла, когда вы подняли, что означает флаг "r". Подробнее здесь .
Для тех, кто ищет быстрый ответ, я добавил ниже.
Если я ввожу регулярное выражение вручную в скрипте Python, я могу использовать 4 комбинации флагов для моих строк шаблона:
- p1 = "pattern"
- p2 = u "pattern"
- p3 = r "pattern"
- p4 = ru "pattern"
У меня есть куча строк в Юникоде, поступающих из веб-формы, и я хочу использовать их в качестве шаблонов регулярных выражений.
Я хочу знать, какой процесс мне следует применить к строкам, чтобы я мог ожидать аналогичного результата от использования формы, приведенной выше. Что-то вроде:
import re
assert re.match(p1, some_text) == re.match(someProcess1(web_input), some_text)
assert re.match(p2, some_text) == re.match(someProcess2(web_input), some_text)
assert re.match(p3, some_text) == re.match(someProcess3(web_input), some_text)
assert re.match(p4, some_text) == re.match(someProcess4(web_input), some_text)
Каким будет какой-нибудь Process1 для someProcessN и почему?
Я полагаю, что someProcess2 не нужно ничего делать, в то время как someProcess1 должен выполнить некоторое преобразование юникода в локальную кодировку. Что касается необработанных строковых литералов, я ничего не понимаю.