1

python的正则表达式是否有任何等同于匹配给定范围内的数字的东西?

例如在 bash 中,可以通过 test{19..21}.txt 匹配 test19.txt、test20.txt、test21.txt

不是在寻找正则表达式来匹配所有数字,如 [1-2][0-9]。

我只想匹配从某个数字到另一个数字的特定系列数字。

更新:最终目标是使用 re.compile() 创建一个正则表达式对象,以便我可以使用它来搜索一大串字符串。

4

4 回答 4

5
['text' + str(i) + '.txt' for i in range(19, 22)]

会给你这个清单:

['test19.txt', 'test20.txt', 'test21.txt']

因此,您可以列出该列表中的文件。例如,如果您有一个名为的单词列表words并想要过滤与之匹配的单词:

r = ['text' + str(i) + '.txt' for i in range(19, 22)]
[x for x in words if x in r]

但如果你真的想要一个正则表达式:

re.compile('|'.join(['text' + str(i) + '.txt' for i in range(19, 22)]))
于 2013-10-28T21:46:36.263 回答
1

尽管还有另一个类似的问题(正则表达式:数字范围),其答案建议仅使用正则表达式来匹配使用类似的东西出现的数字\d{1,3}但该答案指向rgxg可以生成正则表达式的命令行工具匹配指定的数字范围。

于 2013-10-28T22:00:47.220 回答
1

假设您有这些文件:

$ cd test
$ touch file{1..25}.txt
$ ls
file1.txt   file14.txt  file19.txt  file23.txt  file5.txt
file10.txt  file15.txt  file2.txt   file24.txt  file6.txt
file11.txt  file16.txt  file20.txt  file25.txt  file7.txt
file12.txt  file17.txt  file21.txt  file3.txt   file8.txt
file13.txt  file18.txt  file22.txt  file4.txt   file9.txt

您可以使用 glob 来匹配以下的宏伟模式file[numers].txt

import glob
import os
import re

os.chdir('/Users/andrew/test')

print glob.glob('file[0-9]*.txt')
# ['file1.txt', 'file10.txt', 'file11.txt', 'file12.txt', 'file13.txt', 'file14.txt', 'file15.txt', 'file16.txt', 'file17.txt', 'file18.txt', 'file19.txt', 'file2.txt', 'file20.txt', 'file21.txt', 'file22.txt', 'file23.txt', 'file24.txt', 'file25.txt', 'file3.txt', 'file4.txt', 'file5.txt', 'file6.txt', 'file7.txt', 'file8.txt', 'file9.txt']

然后使用带有正则表达式的列表推导来缩小该列表:

def expand(x,lo=0,hi=sys.maxint): 
    return lo<=int(re.search(r'\d+', x).group(0))<=hi

print [e for e in glob.glob('file[0-9]*.txt') if expand(e, 8,12)]
# ['file10.txt', 'file11.txt', 'file12.txt', 'file8.txt', 'file9.txt']

或使用过滤器:

print filter(lambda x: expand(x, 9, 12), glob.glob('file[0-9]*.txt'))
# ['file10.txt', 'file11.txt', 'file12.txt', 'file9.txt']
于 2013-10-28T22:04:26.717 回答
0

你在找什么?

总有range(19,22)这取决于你所期待的接近卷曲扩展

于 2013-10-28T21:46:44.627 回答