web-dev-qa-db-ja.com

ファイル名の先頭とファイル名拡張子に一致する正規表現

「ファイル名を指定して実行」で始まり、ファイル名拡張子が「.py」の文字列(この場合はファイル名)に一致する正規表現は何ですか?

正規表現は次のいずれかに一致する必要があります。

RunFoo.py
RunBar.py
Run42.py

一致してはいけません:

myRunFoo.py
RunBar.py1
Run42.txt

私が探しているものに相当するSQLは... LIKE 'Run%.py' ...

18
Ray Vega

正規表現の場合、次を使用します。

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

簡単な説明:

  • 。任意の文字に一致することを意味します。
  • *は前の文字の繰り返しに一致することを意味します(したがって、。*は任意の文字シーケンスを意味します)
  • \は明示的なドットをエスケープするエスケープです
  • $は「文字列の終わり」を示すため、「Run_foo.py.txt」とは一致しません

ただし、このタスクでは、おそらく単純な文字列メソッドを使用した方がよいでしょう。すなわち。

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

注:大文字と小文字を区別しない場合(つまり、「run.PY」と「Run.py」を一​​致させる場合は、正規表現にre.Iオプションを使用するか、特定の大文字小文字に変換します(filename.lower()など)。文字列メソッドを使用する前。

40
Brian

警告:

  • jobscryの答え( "^ Run。?。py $")は正しくありません(たとえば、 "Run123.py"とは一致しません)。
  • orlandu63の回答( "/^Run[\w]*?.py$/")は "RunFoo.Bar.py"と一致しません。

(申し訳ありませんが、コメントするのに十分な評判がありません。)

15
Rob Howard

この「問題」を解決するために正規表現を求めている理由がよくわかりません。 「実行」で始まるすべての.pyファイルを見つける方法の直後です。したがって、これは実行中の正規表現のコンパイルに頼らずに機能する単純なソリューションです。

import os
for filename in os.listdir(dirname):
    root, ext = os.path.splitext(filename)
    if root.startswith('Run') and ext == '.py':
        print filename
13
Jerub
/^Run.*\.py$/

または、python具体的には:

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

これは「Runfoobar.py」と一致しますが、「runfoobar.PY」とは一致しません。大文字と小文字を区別しないようにするには、代わりに次を使用します。

re.match(r"^Run.*\.py$", stringtocheck, re.I)
7
Rob Howard

正規表現は必要ありません。ワイルドカードを使用するglobを使用できます。実行* .py

たとえば、これらのファイルを現在のディレクトリに取得するには...

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

少し複雑な正規表現を作成すると、「実行」と「.py」の間のビットを抽出するという追加機能を利用できます。

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

(余分なビットは括弧とそれらの間のすべてです。ただし、ロブ・ハワードの回答にある '。*'は除きます)

3
John Fouhy

これはおそらくファイル命名基準に完全には準拠していませんが、次のようになります。

/^Run[\w]*?\.py$/
0
moo

mabye:

^Run.*\.py$

ちょっと試して

0
imjoevasquez