[英]python run multiple lines on multiple regex
我有一個文件夾,需要包含某些文件,這些文件的名稱中包含魔法,所以我有一個包含 os.listdir(sstable_dir_path) 的所有文件的列表,並且我有一個正則表達式列表,其中一個應該與其中一個文件名匹配. 沒有嵌套的 for 有什么辦法嗎?
SSTABLE_FILENAMES_REGEXES = [re.compile(r'md-\d+-big-CompressionInfo.db'), re.compile(r'md-\d+-big-Data.db'),
re.compile(r'md-\d+-big-Digest.crc32'), re.compile(r'md-\d+-big-Filter.db'),
re.compile(r'md-\d+-big-Index.db'), re.compile(r'md-\d+-big-Statistics.db'),
re.compile(r'md-\d+-big-Summary.db'), re.compile(r'md-\d+-big-TOC.txt')]
文件名示例:
md-146-big-CompressionInfo.db
md-146-big-Data.db
md-146-big-Digest.crc32
md-146-big-Filter.db
md-146-big-Index.db
md-146-big-Statistics.db
md-146-big-Summary.db
md-146-big-TOC.txt
我目前是怎么做的
all([any([regex.fullmatch(fillename) for regex in SSTABLE_FILENAMES_REGEXES]) for fillename in os.listdir(sstable_dir_path)])
如果你願意,你可以構建一個格式為(?=.*^pattern1$)(?=.*^pattern2$)
的正則表達式 - (?=)
是積極的前瞻 - ^$
用於模擬“完全匹配”行為。
然后,您可以從os.listdir()
創建一個多行字符串以進行匹配。
SSTABLE_FILENAMES = [
'big-CompressionInfo.db', 'big-Data.db', 'big-Digest.crc32', 'big-Filter.db',
'big-Index.db', 'big-Statistics.db', 'big-Summary.db', 'big-TOC.txt'
]
regex = re.compile('(?ms)' +
''.join(f'(?=.*^md-\d+-{re.escape(name)}$)'
for name in SSTABLE_FILENAMES)
)
>>> bool(regex.search('\n'.join(os.listdir(sstable_dir_path))))
True
files = ['md-146-big-CompressionInfo.db',
'md-146-big-Data.db',
'md-146-big-Digest.crc32',
'md-146-big-Filter.db',
'md-146-big-Index.db',
'md-146-big-Statistics.db',
'md-146-big-Summary.db',
'md-146-big-TOC.txt']
pattern = '|'.join(map(lambda x: x.pattern, SSTABLE_FILENAMES_REGEXES))
res = [fillename for fillename in files.split() if re.fullmatch(pattern=pattern , string=fillename) ]
print(res)
結果:
['md-146-big-CompressionInfo.db', 'md-146-big-Data.db', 'md-146-big-Digest.crc32', 'md-146-big-Filter.db', 'md-146-big-Index.db', 'md-146-big-Statistics.db', 'md-146-big-Summary.db', 'md-146-big-TOC.txt']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.