2017-03-08 14 views
3

これは私の最初の正規表現です。私はそれを策定するのに助けが必要です。 A-Z a-z 0-9 - . _ ~ () ' ! * : @ , ; + ?安全な文字を許可する正規表現

そして実際に+?は安全でなく、かなりそれ以外の場合は、URL内で使用する場合:次のように仕様によると、ドメイン名以外のための安全な文字のセットです。

上記の文字セットを正規表現として表現するにはどうすればよいですか(つまり、これらの文字のみが許可され、他はすべて除外されます)。

私はregexr.comで行きました。これまで私は([A-Z,a-z,0-9,+-])\w+.を試行錯誤で構築しましたが、これは不十分です。誰かがここで正しい正規表現を定式化するのを助けることができますか? Btw私はPython 2.7を使用します

+2

どのパターンが一致しますか? – putonspectacles

答えて

2
r"^[A-Za-z0-9._~()'!*:@,;+?-]*$" 

これは、安全な文字で構成される文字列と一致します。

+0

それはまた空の文字列にマッチします、おそらく(修正するのは簡単ではありません) –

+0

それは本当にユースケースに依存します。空の文字列には安全でない文字は含まれていないため、一致させることが意図されている可能性があります。もちろん、*が必要ならば*を+に置き換えてください。 – Denziloe

+1

もちろん、私はあなたが知っている知っている:) –

2

正規表現を使用して文字列内の1文字をテストするのを避けることができます。

私はstr.isalnumallを使用するか、許可非alphanumsに対してチェックしたい:xが空でない場合があるため、最初isalnum()をテスト

  • (空の文字列が有効なURLではありません)

    x and all(x.isalnum() or x in "._~()'!*:@,;+?-" for x in s) 
    
    • テストおそらく記号よりも文字が多いので少し速くなります)
  • 関連する問題