我想寫一個正則表達式使用串以下列方式確定一個令牌:正則表達式來處理字母,數字和%符號
'eyAidXNlcl9pZCI6NywidG9rZW5fY3JlYXRpb25fdGltZSI6MTQyMDQ4NTUyMS4zNyB9%0A'
或
'eyJ1c2VyX2lkIjo3LCJ0b2tlbl9jcmVhdGlvbl90aW1lIjoxNDIwNDk0MTcxLjc5fQ%3D%3D'
我的Django的網址結構使用以下模式:
url(r'^(?P<object_id>\d+)/email/(?P<token>[a-f0-9]{100})/(?P<pk>\d+)/$', objects.ObjectDetail.as_view(), name="create-using-token"),
我不知道什麼正則表達式來解析令牌(?P<token>[a-f0-9]{100})
應該是因爲我不確定如何處理%
符號。我生成這些令牌別處使用urllib
(具體而言,urllib.quote(string.encode("base64"))
)
我在殼測試該代碼塊如下:
import re
token = 'eyAidXNlcl9pZCI6NywidG9rZW5fY3JlYXRpb25fdGltZSI6MTQyMDQ4NTUyMS4zNyB9%0A'
pattern = '\w+\W+'
re.findall(pattern, token)
我使用[a-f0-9]{100}
,'\w+\W+'
和[\w|\W]
試過。這些變得非常接近,但我不知道如何處理這個%
符號,因爲它們要麼分開,要麼忽略%
之後的符號。
我用下面的方法生成令牌:
def generate_token():
now = time.time()
raw_string = '{{"random_number":{random_number},"token_creation_time":{now}}}'.format(
random_number=random_number,
now=now).strip()
token = raw_string.encode("base64")
return urllib.quote(token)
每@ alecxe的建議,我曾與.rstrip('\n')
嘗試刪除\n
,編碼增加了,但是我仍然需要能夠識別包含%
符號標記
這很奇怪。我以編程方式生成它們,並使用'「」.format()構造我的字符串'我在最後沒有添加新行。 – djq
@celenius如果您在發送令牌之前調用字符串['strip()'](https://docs.python.org/2/library/stdtypes.html#str.strip),該怎麼辦? – alecxe
即使使用'strip()'它仍然以'%0A'結尾 – djq