代码之家  ›  专栏  ›  技术社区  ›  Ray

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

  •  17
  • Ray  · 技术社区  · 16 年前

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

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

    RunFoo.py
    RunBar.py
    Run42.py
    

    它不应匹配:

    myRunFoo.py
    RunBar.py1
    Run42.txt
    

    我要找的SQL等价物是 ... LIKE 'Run%.py' ... .

    8 回复  |  直到 7 年前
        1
  •  35
  •   Brian    16 年前

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

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

    快速解释:

    • . 表示匹配任何字符。
    • *表示匹配前一个字符的任何重复(因此,*表示任何字符序列)
    • \是转义以转义显式点
    • $表示“字符串结束”,因此我们不匹配“run foo.py.txt”

    但是,对于这个任务,您最好使用简单的字符串方法。IE.

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

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

        2
  •  15
  •   Rob Howard    16 年前

    警告:

    • Jobscry的回答(“^run.”?.py$“)不正确(例如,将与”run123.py“不匹配)。
    • Orlandu63的答案(“/^run[\w]*?.py$/“)将与“runfoo.bar.py”不匹配。

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

        3
  •  13
  •   Jerub    16 年前

    我真的不明白你为什么要用正则表达式来解决这个问题。你只是在寻找所有以“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
    
        4
  •  7
  •   Rob Howard    16 年前
    /^Run.*\.py$/
    

    或者,在python中:

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

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

    re.match(r"^Run.*\.py$", stringtocheck, re.I)
    
        5
  •  4
  •   Simon Peverett    16 年前

    您不需要正则表达式,可以使用glob,它使用通配符,例如run*.py

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

    import os, glob
    files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )
    
        6
  •  3
  •   John Fouhy    16 年前

    如果编写稍微复杂一点的正则表达式,则可以获得一个额外的特性:提取“run”和“.py”之间的位:

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

    (额外的一点是括号以及括号之间的所有内容,除了“.*”,这和Rob Howard的答案一样)

        7
  •  0
  •   moo    16 年前

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

    /^Run[\w]*?\.py$/
    
        8
  •  0
  •   imjoevasquez    16 年前

    马比:

    ^Run.*\.py$
    

    只是一个快速的尝试