25

'Run' で始まり、'.py' というファイル名拡張子を持つ文字列 (この場合はファイル名) に一致する正規表現は何ですか?

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

RunFoo.py
RunBar.py
Run42.py

一致するべきではありません:

myRunFoo.py
RunBar.py1
Run42.txt

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

4

8 に答える 8

54

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

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

簡単な説明:

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

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

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

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

于 2008-10-08T23:48:59.517 に答える
15

この「問題」を解決するために正規表現を求めている理由がよくわかりません。'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
于 2008-10-09T01:27:29.927 に答える
15

警告:

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

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

于 2008-10-09T00:01:25.030 に答える
10
/^Run.*\.py$/

または、具体的にはPythonで:

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

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

re.match(r"^Run.*\.py$", stringtocheck, re.I)
于 2008-10-08T23:46:24.747 に答える
6

正規表現は必要ありません。たとえば、Run*.py などのワイルドカードを使用できる glob を使用できます。

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

import os, glob
files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )
于 2008-10-09T11:57:56.613 に答える
4

もう少し複雑な正規表現を書くと、追加の機能を得ることができます: "Run" と ".py" の間のビットを抽出します:

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

(余分なビットは、括弧とそれらの間のすべてです。ただし、Rob Howard's answer のように「.*」を除きます)

于 2008-10-09T01:20:30.330 に答える
0

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

/^Run[\w]*?\.py$/
于 2008-10-08T23:45:57.230 に答える
0

メイバイ:

^Run.*\.py$

簡単に試してみる

于 2008-10-08T23:47:56.633 に答える