簡體   English   中英

python 在多個正則表達式上運行多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM