Django URL 正则表达式
我需要你的帮助来验证一个在Python中的正则表达式链接。这个链接应该长这样:
http://www.example.com?utm_source=something&utm_medium=somethingelse
我试过类似这样的东西:
r'^\?utm_source\=(?P<utm_source>[-\w]+)&utm_medium\=(?P<utm_medium>[-\w]+)/$'
但是这不管用。你能帮我一下吗?还有哪些其他字符需要转义呢?
2 个回答
1
你不需要那么多转义字符:
r'^\?utm_source=(?P<utm_source>[-\w]+)&utm_medium=(?P<utm_medium>[-\w]+)/$'
这样,你的正则表达式只会匹配完整的字符串;它不会找到部分匹配,所以也许你需要去掉那些锚点?
r'\?utm_source=(?P<utm_source>[-\w]+)&utm_medium=(?P<utm_medium>[-\w]+)/'
最后,正则表达式末尾的斜杠是必须的,但在你的示例字符串中缺少了。所以这样怎么样:
r'\?utm_source=(?P<utm_source>[-\w]+)&utm_medium=(?P<utm_medium>[-\w]+)/?'
4
这是一个经典的 XY问题。
Tim的回答给出了你想要的解决方案。
我建议,如果你只是想验证一个查询字符串,其实根本不需要用到正则表达式。
可以看看 urlparse
...
>>> a_url = 'http://www.example.com?utm_source=something&utm_medium=somethingelse'
>>> parser = urlparse.urlparse(a_url)
>>> qs = urlparse.parse_qs(parser.query)
>>> 'utm_medium' in qs
True
>>> len(qs['utm_medium']) == 1
True
>>> qs['utm_medium'][0].isalpha()
True
>>> 'utm_source' in qs
True
>>> len(qs['utm_source']) == 1
True
>>> qs['utm_source'][0].isalpha()
True
>>> 'utm_zone' in qs
False