4 回答
TA贡献2011条经验 获得超2个赞
你可以使用正则表达式做这样的事情:
import re
txts = ["34291.daveabc2712144.txt",
"eidddvabc24156.mp3",
"beonabcsimple.csv",
"fABCgfdge.txt"]
for i in txts:
x = re.findall("abc.{5}", i)
#if you need to be case insensitive you can do this
#x = re.findall("abc.{5}", i, re.IGNORECASE)
if x:
print(x)
TA贡献1777条经验 获得超3个赞
以下是如何使用该glob模块。假设所有的abc都是小写的:
from glob import glob
for file in glob('*abc*'): # For every file that has 'abc' in it
i = file.find('abc') # Find the index of the 'abc'
print(file[i:i+8]) # Print out the file name 5 characters from the end of 'abc', or 8 from the start
这样做的好处是:glob('*abc*')这样我们就不会首先列出所有'abc'文件,只列出名称中包含的文件。
TA贡献1797条经验 获得超6个赞
>>> s = '34291.daveabc2712144.txt'
>>> s[(start := s.index('abc')): start + 8]
'abc27121'
假设海象运算符'abc'可以找到并且需要 Python 3.8+。
在我看来,这样一个简单的任务不需要正则表达式。
TA贡献1796条经验 获得超10个赞
您可以使用正则表达式:
abc.{5}
在Python:
import re
strings = ["34291.daveabc2712144.txt", "eidddvabc24156.mp3", "beonabcsimple.csv"]
rx = re.compile(r'abc.{5}')
names = [m.group(0) for string in strings for m in [rx.search(string)] if m]
print(names)
添加回答
举报