Python正则表达式相当于bash的{1..4}

时间:2013-10-28 21:42:21

标签: python regex bash

python的正则表达式是否具有与给定范围内的匹配数相等的东西?

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

寻找正则表达式以匹配[1-2] [0-9]等所有数字。

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

更新:最终目标是使用re.compile()创建一个regexp对象,这样我就可以用它来搜索一大串字符串。

4 个答案:

答案 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)取决于您正在接近卷曲扩展的内容