python的正则表达式是否具有与给定范围内的匹配数相等的东西?
例如在bash中,你可以通过test {19..21} .txt匹配test19.txt,test20.txt,test21.txt
我不寻找正则表达式以匹配[1-2] [0-9]等所有数字。
我想只匹配从某个数字开始到另一个数字的特定系列数字。
更新:最终目标是使用re.compile()创建一个regexp对象,这样我就可以用它来搜索一大串字符串。
答案 0 :(得分: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)]))
答案 1 :(得分:1)
虽然还有另一个类似的问题(Regular Expression: Numeric Range),但其答案建议仅使用正则表达式来匹配数字的出现,使用\d{1,3}
,this answer行的内容指向命令行工具rgxg
,它可以生成与指定数字范围匹配的正则表达式。
答案 2 :(得分: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']
答案 3 :(得分:0)
始终range(19,22)
取决于您正在接近卷曲扩展的内容