什么是正则表达式匹配字符串(在这种情况下,文件名)与“运行”开始,有“的.py”的文件扩展名?正则表达式匹配文件名和扩展名的开始
正则表达式应匹配以下任一:
RunFoo.py
RunBar.py
Run42.py
它不应该匹配:
myRunFoo.py
RunBar.py1
Run42.txt
的SQL相当于我所寻找的是... LIKE 'Run%.py' ...
。
什么是正则表达式匹配字符串(在这种情况下,文件名)与“运行”开始,有“的.py”的文件扩展名?正则表达式匹配文件名和扩展名的开始
正则表达式应匹配以下任一:
RunFoo.py
RunBar.py
Run42.py
它不应该匹配:
myRunFoo.py
RunBar.py1
Run42.txt
的SQL相当于我所寻找的是... LIKE 'Run%.py' ...
。
对于一个正则表达式,你可以使用:
re.match(r'Run.*\.py$')
一简单说明:
但是,对于此任务,您最好使用简单的字符串方法。即。
filename.startswith("Run") and filename.endswith(".py")
注意:如果你想不区分大小写(即符合“run.PY”以及“Run.py”,使用如re.I选项正则表达式,或转换到一个特定的情况下(。如filename.lower())使用字符串方法之前
这可能并不完全符合文件命名标准,但这里有云:
/^Run[\w]*?\.py$/
/^Run.*\.py$/
或者,在蟒蛇具体为:
import re
re.match(r"^Run.*\.py$", stringtocheck)
这将匹配“Runfoobar .py“,但不是”runfoobar.PY“。为了使它不区分大小写,而使用:
re.match(r"^Run.*\.py$", stringtocheck, re.I)
警告:
(我没有足够的信誉发表评论,对不起。)
如果你写一个稍微复杂的正则表达式,你可以得到一个额外的功能:提取“运行”之间的位和“py”为:
>>> import re
>>> regex = '^Run(?P<name>.*)\.py$'
>>> m = re.match(regex, 'RunFoo.py')
>>> m.group('name')
'Foo'
(额外位是括号他们之间的一切,除了'。*',就像罗布霍华德的回答一样)
我真的不明白你为什么要用正则表达式来解决这个问题。你只是想找到所有以'Run'开头的.py文件。所以这是一个简单的解决方案,将工作,而不诉诸编译一个运行的正则表达式:
import os
for filename in os.listdir(dirname):
root, ext = os.path.splitext(filename)
if root.startswith('Run') and ext == '.py':
print filename
你并不需要一个正则表达式,你可以使用水珠,这需要通配符例如运行*的.py
例如,要获取这些文件在当前目录...
import os, glob
files = glob.glob("".join([ os.getcwd(), "\\Run*.py"]))
看起来像标签蟒蛇一个问题一个Perl的解决方案......但我不是一个Python专家:P工作分析指出你的解决方案是区分大小写的。 – 2008-10-08 23:57:35
*错误有Rob Howard指出是 – 2008-10-08 23:58:20
不应该使用。*,而不是\ w - 标点符号和空格等可能仍应被视为文件名的一部分。例如“Run.foo.py” – Brian 2008-10-08 23:58:30