簡體   English   中英

正則表達式處理字母,數字和%符號

[英]Regex to handle letters, numbers and % symbol

我正在嘗試編寫一個正則表達式以使用具有以下模式的字符串標識令牌:

'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 ,但是我仍然需要能夠識別包含%符號的令牌

如果取消引用%0A ,則將看到它是換行符:

>>> import urllib
>>> urllib.unquote('%0A')
'\n'

您可能不小心將其保留在令牌字符串中。 我認為您不希望令牌包含它,因此您無需嘗試將令牌與換行符最后匹配。


查看generate_token()函數。 base64編碼器的功能是在編碼字符串的末尾添加尾隨換行符。 剝離:

 token = raw_string.encode("base64").rstrip('\n')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM