Python 用于处理字母、数字和%符号的正则表达式
我正在尝试编写一个正则表达式,以使用具有以下模式的字符串来标识令牌:Python 用于处理字母、数字和%符号的正则表达式,python,regex,django,Python,Regex,Django,我正在尝试编写一个正则表达式,以使用具有以下模式的字符串来标识令牌: 'eyaidxnlcl9pzci6nywidg9rzw5fyxrpb25fdgltzsi6mqymdq4ntuyms4znyb9%0A' 或 'eyj1c2vyx2lkijo3lcj0b2tlbl9jcmvhdglvbl90aw1lijoxndowndk0mtcxljc5fq%3D%3D' My django url的结构使用以下模式: url(r'^(?p\d+)/email/(?p[a-f0-9]{100})/(?p\d+
'eyaidxnlcl9pzci6nywidg9rzw5fyxrpb25fdgltzsi6mqymdq4ntuyms4znyb9%0A'
或
'eyj1c2vyx2lkijo3lcj0b2tlbl9jcmvhdglvbl90aw1lijoxndowndk0mtcxljc5fq%3D%3D'
My django url的结构使用以下模式:
url(r'^(?p\d+)/email/(?p[a-f0-9]{100})/(?p\d+/$),objects.ObjectDetail.as_view(),name=“使用令牌创建”),
我不知道解析标记(?p[a-f0-9]{100})的正则表达式应该是什么,因为我不确定如何处理%
符号。我在别处使用urllib
(特别是urllib.quote(string.encode(“base64”))生成这些令牌
我在shell中测试此功能的代码块如下所示:
import re
token = 'eyAidXNlcl9pZCI6NywidG9rZW5fY3JlYXRpb25fdGltZSI6MTQyMDQ4NTUyMS4zNyB9%0A'
pattern = '\w+\W+'
re.findall(pattern, token)
我试过使用[a-f0-9]{100}
,'\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'
您可能不小心将其留在了令牌字符串中。我认为您不希望令牌包含它,因此不需要尝试将令牌与末尾的新行匹配
查看生成令牌()
函数。在编码字符串的末尾添加尾随新行是的一项功能。剥去它:
token = raw_string.encode("base64").rstrip('\n')
真奇怪。我正在以编程方式生成它们,并使用“”.format()构造字符串。
我并没有在末尾添加新行。@celenius如果在发送令牌之前调用字符串会怎么样?即使使用strip()
它仍然以%0A
@celenius结尾。您能否显示用于生成和发送令牌的代码(尽可能多,相关部分)?谢谢。我刚刚添加了它-谢谢你的建议!