このは先読みアサーションで行うことができます。
ご覧のとおり、これは正規表現がうまくいくものではありません。
は、私が行っているでしょう:
if all(char in mystr for char in "abc"):
# do something
はスピードのチェック:
>>> timeit.timeit(stmt='chars.issubset("bracket");chars.issubset("notinhere")',
... setup='chars=set("abc")')
1.3560583674019995
>>> timeit.timeit(stmt='all(char in "bracket" for char in s);all(char in "notinhere" for char in s)',
... setup='s="abc"')
1.4581878714681409
>>> timeit.timeit(stmt='r.match("bracket"); r.match("notinhere")',
... setup='import re; r=re.compile("(?=.*a)(?=.*b)(?=.*c)")')
1.0582279123082117
はねえ、見て、正規表現の勝利を!これは、さらに長い検索文字列のためにも当てはまる:ここ
>>> timeit.timeit(stmt='chars.issubset("bracketed");chars.issubset("notinhere")',
... setup='chars=set("abcde")')
1.4316702294817105
>>> timeit.timeit(stmt='all(char in "bracketed" for char in s);all(char in "notinhere" for char in s)',
... setup='s="abcde"')
1.6696223364866682
>>> timeit.timeit(stmt='r.match("bracketed"); r.match("notinhere")',
... setup='import re; r=re.compile("(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?:.*e)")')
1.1809254199004044
感謝を答え。私が正規表現を使いたい理由は、文字列に対して複数の種類のマッチを実行しようとしているからです。マッチエンド。開始と終了の両方に一致します。部分文字列と完全に一致します。私はそれらのクエリの正規表現を使用していますが、私はあなたの応答から "任意の順序ですべての文字を一致させる"正規表現ではないので、私はそのクエリを分離する必要があります何かではないと思います。 – steve8918
エレガントでコンパクトです。なぜ私はまだJavaを使用しているのだろうかと思う: –