Создание регулярного выражения для сопоставления имен файлов из путей к файлам - PullRequest
0 голосов
/ 25 марта 2020

У меня есть список с различными путями к файлам

например:

changed_files = ['/home/file1.txt', '/home/test/file2.cls', 'home/file3.cls', '/home/file5.cls2', '/user/bin/cls/test.txt']

Я хочу получить имена файлов с расширением .cls, используя regex. Выходные данные, которые я хочу, это

['file2','file3'] 

Я пытаюсь использовать это регулярное выражение: -

r = re.compile("([^/.]+)\.[^.]*$", re.MULTILINE)
newlist = list(filter(r.match, changed_files))

Но, похоже, это не работает.

Ответы [ 4 ]

1 голос
/ 25 марта 2020

Вы можете попробовать это с помощью регулярных выражений.

changed_files = ['/home/file1.txt', '/home/test/file2.cls', 'home/file3.cls', '/home/file5.cls2', '/user/bin/cls/test.txt']
[x.group(1) for i in changed_files if (x:=re.search(r'(\w+)\.cls\b',i))]
# ['file2', 'file3']

Демо здесь.

0 голосов
/ 25 марта 2020

код:

r = re.compile("/\w+\.cls$")
res = [file.split('/')[-1].rstrip('.cls') for file in changed_files  if re.findall(r, file)]

выход:

['file2', 'file3']
0 голосов
/ 25 марта 2020

Если вы хотите использовать регулярные выражения, что-то вроде этого будет работать:

txt = ['/home/file1.txt', 'home/test/file2.cls', 'home/file3.cls']
finalList = []
for item in txt:
  if re.search(".cls$", item):
    formattedName = item.split('/')[-1].split('.cls')[0]
    finalList.append(formattedName)

print(finalList)
0 голосов
/ 25 марта 2020

Использовать понимание списка с условием

cls_files = [
    file.split('/')[-1].rstrip('.cls') for file in changed_files if file.endswith('.cls')
] 

Вывод

['file2', 'file3']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...