python3 glob.glob regex только получает первый матч - PullRequest
0 голосов
/ 17 октября 2018

Возникла небольшая странная проблема, поскольку этот код, кажется, прекрасно работает на моем Mac с друзьями, но совсем не работает на моем Ubuntu 16.04.

Через мой python я запускаю следующее

filenames = glob.glob(opts['-I'])

, который пытается сопоставить с набором из 32 текстовых файлов в формате TEXT / text01.txt

Моим начальным регулярным выражением было следующее

python -I TEXT/text??

, котороевернул ноль файлов.

Я также пытался

python -I TEXT/text*

, который, кажется, только возвращает text01.txt.Есть ли соответствующее регулярное выражение, которое может получить все текстовые файлы вместо только первого, и есть ли причина, по которой это работает на Mac, но не на Ubuntu?

1 Ответ

0 голосов
/ 17 октября 2018

проблема, когда вы звоните

python -I TEXT/text*

, заключается в том, что TEXT/text* расширяется оболочкой.Таким образом, именно эти аргументы передаются в python:

-I TEXT/text01.txt TEXT/text02.txt (and other matching files)

argparser присваивает text01.txt опции -I, а другие аргументы игнорируются (проверьте позиционные аргументы, чтобы найти их).glob.glob возвращает точное имя файла, которое он получает (обратите внимание, что text?? не соответствует text01.txt, потому что вы пропустили расширение, или сделайте его text??.txt)

Вам необходимо заключить в кавычки ваш символ (не regex)

python -I "TEXT/text*"

или экранировать подстановочный знак:

python -I TEXT/text\*

или использовать более доисторическую командную строку, такую ​​как windows CMD, где подстановочные знаки передаются буквально.

...