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结尾。您能否显示用于生成和发送令牌的代码(尽可能多,相关部分)?谢谢。我刚刚添加了它-谢谢你的建议!