0

我有这种格式的文件名:

anytext_NUMBER_svm.pkl

我需要遍历目录中的所有文件和看起来像这样的文件:

file1.txt
file2.txt
anytext_1_svm.pkl
anytext_2_svm.pkl
anytext_3_svm.pkl

匹配的文件将是这样的:

anytext_1_svm.pkl
anytext_2_svm.pkl
anytext_3_svm.pkl

如何使用 python 正则表达式来做到这一点?

4

5 回答 5

2

一个选项:

  • 不使用re
  • 确保比较仅在文件名部分 - 而不是路径的一部分
  • 限制文件名模式的数量以进一步验证使用iglob

代码:

from glob import iglob
import os.path
for fname in iglob('*_*_svm.pkl'):
    path, name = os.path.split(fname)
    anytext, digit, rest = name.split('_', 2) 
    if digit.isdigit(): # add criteria for anytext if required...
        # ....
于 2012-08-12T14:02:14.310 回答
1

这个正则表达式应该解决你的问题:

>>> import re
>>> regex = re.compile(r'.+_\d+_svm\.pkl')
>>> regex.search('anytext_1_svm.pkl') != None
True

但你绝对应该看看文档:http ://docs.python.org/library/re.html

于 2012-08-12T13:47:36.623 回答
0

捕获“anytext_NUMBER_svm.pkl”的正则表达式非常简单。

r'.+_\d+_svm\.pkl'
于 2012-08-12T13:47:16.080 回答
0

我建议对该页面进行审查:http: //docs.python.org/py3k/library/re.html#module-re

它将帮助您了解如何编写正则表达式并确保您正确匹配事物。对于数字,使用 [0-9]*,使用 _ 分隔您的组,并编写一些匹配检查条件的东西,这将是一个快速的项目。

于 2012-08-12T13:47:19.393 回答
0
import glob
file_list = glob.glob('anytext_[0-9]_svm.pk1')
于 2012-08-12T13:50:08.493 回答