「ファイル名を指定して実行」で始まり、ファイル名拡張子が「.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()など)。文字列メソッドを使用する前。
警告:
(申し訳ありませんが、コメントするのに十分な評判がありません。)
この「問題」を解決するために正規表現を求めている理由がよくわかりません。 「実行」で始まるすべての.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)
正規表現は必要ありません。ワイルドカードを使用するglobを使用できます。実行* .py
たとえば、これらのファイルを現在のディレクトリに取得するには...
import os, glob
files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )
少し複雑な正規表現を作成すると、「実行」と「.py」の間のビットを抽出するという追加機能を利用できます。
>>> import re
>>> regex = '^Run(?P<name>.*)\.py$'
>>> m = re.match(regex, 'RunFoo.py')
>>> m.group('name')
'Foo'
(余分なビットは括弧とそれらの間のすべてです。ただし、ロブ・ハワードの回答にある '。*'は除きます)
これはおそらくファイル命名基準に完全には準拠していませんが、次のようになります。
/^Run[\w]*?\.py$/
mabye:
^Run.*\.py$
ちょっと試して