2017-03-08 73 views
3

這是我用正則表達式的第一天。我需要幫助制定一個。根據規範,集比域名以外的任何安全特徵如下: A-Z a-z 0-9 - . _ ~ () ' ! * : @ , ; + ?允許安全字符的正則表達式

而實際上+?是唯一安全的URL中使用時,不太不然。

如何將上述字符集表示爲正則表達式(即只允許這些字符,其他所有字符除外)。

我在regexr.com去了一次。到目前爲止,我通過反覆試驗構建了([A-Z,a-z,0-9,+-])\w+.,這是不夠的。有人可以幫助我在這裏制定正確的正則表達式。順便說一句我用Python 2.7

+2

你想匹配的模式是什麼? – putonspectacles

回答

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

這隻會匹配包含安全字符的字符串。

+0

它也匹配空字符串,可能不應該(易於修復!) –

+0

這真的取決於用例。空字符串不包含任何不安全的字符,因此可能有意匹配它。當然,如果需要,用*替換*。當然,我知道你知道的是 – Denziloe

+1

:) –

2

你可以避免使用正則表達式來測試字符串中的單個字符。

我會使用allstr.isalnum或對證允許非alphanums:

x and all(x.isalnum() or x in "._~()'!*:@,;+?-" for x in s) 
  • 測試,如果x不爲空(空字符串不是有效的URL)
  • 測試isalnum()第一,因爲有可能比符號更多的字母,因此它會稍微更快)