2015-07-21 2 views
0

Я читал все различные вопросы о сырых строковых литералах и escape-символах, и я все еще смущен - я не могу найти ответ в достаточно простых выражениях, чтобы я мог понять. .Regex и строковые литералы

Я понимаю, что префиксы строку с «г» лечит управляющие символы как литералы, так, например:

my_string = r"\n" 

дает буквенную строку «\ п», в отличие от подачи новой строки, которые вы получаете от

my_other_string = "\n" 

Однако, если я затем использовать регулярное выражение, чтобы соответствовать этому строковый литерал не работает:

match = re.search(r"\n", my_string) 

Что мне не хватает?

+0

Показать пример строки, которая, по вашему мнению, должна совпадать. – iobender

+0

Что-то интересное, может быть: 're.search (r '\ n', '\ n')' соответствует: P – NightShadeQueen

+0

Это меня смутило больше (!) - конечно, это пытается сопоставить литерал \ n с фишкой новой строки, который не должен работать ... – Dick

ответ

0
match = re.search(r"\\n", my_string) 

Вам нужно бежать \ как в my_string вы определили raw string .so питон не будет принимать его как 1 символ \n но 2 символы \ и n Так что вам нужно использовать \\, чтобы соответствовать \.

+0

'r' достаточно, чтобы избежать его для python. Вам просто нужно избегать его * снова * для 're', поэтому вы часто видите, что люди используют необработанные строки для повторного использования, потому что набирать две обратные косые черты для всего, что утомляет очень быстро. – NightShadeQueen

+0

@NightShadeQueen yes that's becos of 'r'' \ n' будет обрабатываться как символы' 2', а не '1'. Поэтому' re' не сможет соответствовать '\'. Для этого нам нужно '\\'. – vks

Смежные вопросы