正则表达式匹配文件名和文件扩展名的开头

时间:2008-10-08 23:42:28

标签: python sql regex sql-like

匹配以“Run”开头并且文件扩展名为“.py”的字符串(在本例中为文件名)的正则表达式是什么?

正则表达式应匹配以下任何一项:

RunFoo.py
RunBar.py
Run42.py

不应该匹配:

myRunFoo.py
RunBar.py1
Run42.txt

我正在寻找的SQL等价物是... LIKE 'Run%.py' ...

8 个答案:

答案 0 :(得分:38)

对于正则表达式,您可以使用:

re.match(r'Run.*\.py$')

快速解释:

  • 。意味着匹配任何角色。
  • *表示匹配前一个字符的任何重复(因此。*表示任何字符序列)
  • \是逃避显式点
  • 的逃脱
  • $表示“字符串结束”,因此我们不匹配“Run_foo.py.txt”

但是,对于此任务,您最好使用简单的字符串方法。即

filename.startswith("Run") and filename.endswith(".py")

注意:如果你想要不区分大小写(即匹配“run.PY”以及“Run.py”),请使用正则表达式的re.I选项,或转换为特定的大小写(例如filename.lower) ())在使用字符串方法之前。

答案 1 :(得分:15)

警告:

  • jobscry的答案(“^ Run。?。py $”)不正确(例如,与“Run123.py”不匹配)。
  • orlandu63的回答(“/^ Run [.w]*?。py$ /”)与“RunFoo.Bar.py”不匹配。

(我没有足够的声誉发表评论,抱歉。)

答案 2 :(得分:13)

我真的不明白你为什么要用正则表达式来解决这个'问题'。您只是想找到以'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

答案 3 :(得分:7)

/^Run.*\.py$/

或者,特别是在python中:

import re
re.match(r"^Run.*\.py$", stringtocheck)

这将匹配“Runfoobar.py”,但不匹配“runfoobar.PY”。为了使其不区分大小写,请使用:

re.match(r"^Run.*\.py$", stringtocheck, re.I)

答案 4 :(得分:4)

你不需要正则表达式,你可以使用glob,它可以使用通配符,例如:运行*的.py

例如,要在当前目录中获取这些文件......

import os, glob
files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )

答案 5 :(得分:3)

如果你写一个稍微复杂的正则表达式,你可以得到一个额外的功能:提取“运行”和“.py”之间的位:

>>> import re
>>> regex = '^Run(?P<name>.*)\.py$'
>>> m = re.match(regex, 'RunFoo.py')
>>> m.group('name')
'Foo'

(额外的位是括号和它们之间的所有内容,除了'。*',这与Rob Howard的回答一样)

答案 6 :(得分:0)

这可能并不完全符合文件命名标准,但在这里:

/^Run[\w]*?\.py$/

答案 7 :(得分:0)

mabye:

^Run.*\.py$

快速尝试