python的正则表达式是否有任何等同于匹配给定范围内的数字的东西?
例如在 bash 中,可以通过 test{19..21}.txt 匹配 test19.txt、test20.txt、test21.txt
我不是在寻找正则表达式来匹配所有数字,如 [1-2][0-9]。
我只想匹配从某个数字到另一个数字的特定系列数字。
更新:最终目标是使用 re.compile() 创建一个正则表达式对象,以便我可以使用它来搜索一大串字符串。
['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)]))
尽管还有另一个类似的问题(正则表达式:数字范围),其答案建议仅使用正则表达式来匹配使用类似的东西出现的数字\d{1,3}
,但该答案指向rgxg
可以生成正则表达式的命令行工具匹配指定的数字范围。
假设您有这些文件:
$ 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']
你在找什么?
总有range(19,22)
这取决于你所期待的接近卷曲扩展