python - 正则表达式匹配文件名和文件名扩展名的开始

正则表达式应符合以下任意一项:


RunFoo.py
RunBar.py
Run42.py

它不应该匹配:


myRunFoo.py
RunBar.py1
Run42.txt

我正在寻找等价于SQL ... LIKE 'Run%.py'.. .

时间:

正则表达式,你可以使用:


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

快速说明:

  • .表示匹配任何字符。
  • * 表示匹配前一个字符的任何重复( 因此,* 表示任何字符序列)
  • 是转义显式点的转义符
  • $ 表示"字符串结尾",因此我们不匹配"Run_foo.py.txt"

但最好还是使用简单的字符串方法。


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

警告:

  • jobscry ("^run 。py$") 是不正确的( 将不匹配"run123 。py"。例如) 。
  • orlandu63 ("/^Run[w]*?.py$/")的答案与" runfoo.bar.py"不匹配。

( 我没有足够的声誉来评论,对不起。)

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

在 python 中:


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

这将匹配" runfoobar.py",但不是" runfoobar.py"。 要使它不区分大小写,请使用:


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

你不需要正则表达式,可以使用通配符,它采用通配符 比如 Run*.py

例如要获取当前目录中的那些文件。


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

如果编写稍微复杂一点的正则表达式,则可以获得额外的功能: 在"Run"和". py"之间提取:


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

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

 

 
^Run.*.py$

 

快速尝试一下

...