'Run' で始まり、'.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' で始まるすべての .py ファイルを見つける方法の直後です。したがって、これは、実行中の正規表現をコンパイルすることに頼ることなく機能する簡単なソリューションです。
import os
for filename in os.listdir(dirname):
root, ext = os.path.splitext(filename)
if root.startswith('Run') and ext == '.py':
print filename
警告:
(コメントするには十分な評判がありません、申し訳ありません。)
/^Run.*\.py$/
または、具体的にはPythonで:
import re
re.match(r"^Run.*\.py$", stringtocheck)
これは「Runfoobar.py」には一致しますが、「runfoobar.PY」には一致しません。大文字と小文字を区別しないようにするには、代わりに次を使用します。
re.match(r"^Run.*\.py$", stringtocheck, re.I)
正規表現は必要ありません。たとえば、Run*.py などのワイルドカードを使用できる glob を使用できます。
たとえば、現在のディレクトリにあるこれらのファイルを取得するには...
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'
(余分なビットは、括弧とそれらの間のすべてです。ただし、Rob Howard's answer のように「.*」を除きます)
これはおそらくファイル命名基準に完全には準拠していませんが、次のようになります。
/^Run[\w]*?\.py$/
メイバイ:
^Run.*\.py$
簡単に試してみる