Как заставить подпроцесс python запускать шаблон регулярных выражений без добавления escape-символов? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь запустить locate из python3, используя базовый шаблон регулярных выражений.

subprocess.run( ['locate', '-r', '\.[^\~]$'] )

Но подпроцесс добавляет escape-символы в строку регулярного выражения. Это, кажется, заставляет это сломаться.

Завершенный процесс сообщает, что запустил строку регулярного выражения следующим образом:

'\\.[^\\~]$'

Как мне остановить его, избегая строки регулярного выражения?

1 Ответ

0 голосов
/ 03 июля 2018

Так что вопрос был недействительным. Но ответ, который является ответом на другой вопрос, поучителен.

этот шаблон работал

'.*[^~]$'

Во-первых, не было необходимости избегать символов, от которых я сбежал, как говорит @Wiktor в своем комментарии выше.

Путаница закончилась тем, насколько простым является базовое регулярное выражение bash. В этом отношении приведенная выше картина не совсем так, как кажется.

. * Не значит найти все как обычно. * на свои средства найди все. . просто соответствует точке. Итак. * Означает найти что-то с. сопровождаемый чем-либо.

Чтобы быть более точным, фактический образец, который я использую, больше похож на это:

'abc.*[^~]$'

... найти все файлы с именем, начинающимся с abc. и заканчивается чем-нибудь, кроме ~.

Как ни странно, это не похоже на работу:

'^abc.*[^~]$'
...