匹配文件名开头和文件扩展名的正则表达式
Posted
技术标签:
【中文标题】匹配文件名开头和文件扩展名的正则表达式【英文标题】:Regular expression to match start of filename and filename extension 【发布时间】:2008-10-08 23:42:27 【问题描述】:匹配以“Run”开头且文件扩展名为“.py”的字符串(在本例中为文件名)的正则表达式是什么?
正则表达式应匹配以下任何一项:
RunFoo.py
RunBar.py
Run42.py
不应该匹配:
myRunFoo.py
RunBar.py1
Run42.txt
我正在寻找的 SQL 等价物是 ... LIKE 'Run%.py' ...
。
【问题讨论】:
【参考方案1】:对于正则表达式,您可以使用:
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.您不必为 python 正则表达式匹配指定行首? 2. * 是零个或多个匹配(即 Run.py 是可以接受的) 另外,如何使它不区分大小写? re.match 已经指定了字符串的开头(而不是 re.search,它没有)。给定定义,“Run.py”应该匹配(它以 Run 开头,扩展名为 .py)。对于不区分大小写,请参阅末尾的注释。【参考方案2】:警告:
jobscry 的答案 ("^Run.?.py$") 不正确(例如,与 "Run123.py" 不匹配)。 orlandu63 的答案 ("/^Run[\w]*?.py$/") 与 "RunFoo.Bar.py" 不匹配。(我没有足够的声誉来发表评论,抱歉。)
【讨论】:
【参考方案3】:我真的不明白你为什么要使用正则表达式来解决这个“问题”。您只是想找到所有以“运行”开头的 .py 文件。所以这是一个简单的解决方案,无需编译运行正则表达式即可:
import os
for filename in os.listdir(dirname):
root, ext = os.path.splitext(filename)
if root.startswith('Run') and ext == '.py':
print filename
【讨论】:
【参考方案4】:/^Run.*\.py$/
或者,特别是在python中:
import re
re.match(r"^Run.*\.py$", stringtocheck)
这将匹配“Runfoobar.py”,但不匹配“runfoobar.PY”。要使其不区分大小写,请改用:
re.match(r"^Run.*\.py$", stringtocheck, re.I)
【讨论】:
您的完整示例帮助了我。【参考方案5】:您不需要正则表达式,您可以使用 glob,它采用通配符,例如运行*.py
例如,获取当前目录中的那些文件...
import os, glob
files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )
【讨论】:
【参考方案6】:如果你写一个稍微复杂一点的正则表达式,你可以获得一个额外的功能:提取“Run”和“.py”之间的位:
>>> import re
>>> regex = '^Run(?P<name>.*)\.py$'
>>> m = re.match(regex, 'RunFoo.py')
>>> m.group('name')
'Foo'
(额外的一点是括号和它们之间的所有内容,除了 '.*' 这是 Rob Howard 的回答)
【讨论】:
【参考方案7】:这可能不完全符合文件命名标准,但在这里:
/^Run[\w]*?\.py$/
【讨论】:
看起来像一个 Perl 解决方案,用于标记为 python 的问题......但我不是 python 专家:p 并且正如 jobscry 指出的那样,您的解决方案区分大小写。 您不应该使用 .*,而不是 \w - 标点符号和空格等可能仍应被视为文件名的一部分。例如“Run.foo.py”【参考方案8】:也许:
^Run.*\.py$
快速尝试
【讨论】:
以上是关于匹配文件名开头和文件扩展名的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章