Django URL 正则表达式

0 投票
2 回答
708 浏览
提问于 2025-04-17 03:05

我需要你的帮助来验证一个在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

撰写回答