什麼是正則表達式匹配字符串(在這種情況下,文件名)與「運行」開始,有「的.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