正则表达式:验证没有查询参数的URL路径

时间:2012-10-17 06:57:58

标签: python regex url path

我不是一个正则表达式专家,我正试图做一个看起来非常简单并且在python 2.7中工作的人:在没有查询字符串的情况下验证URL(没有主机名)的路径。换句话说,以/开头的字符串允许使用字母数字值,并且不允许除以下字符之外的任何其他特殊字符:/.-

我发现这个post与我需要的非常相似但是对我来说根本不起作用,我可以用例如aaa进行测试,即使它没有,它也会返回true从/开始。

我现在有点工作的当前正则表达式就是这个:

[^/+a-zA-Z0-9.-]

但它不适用于不以/开头的路径。例如:

  • /aaa - >是的,这没关系
  • /aaa/bbb - >是的,这没关系
  • /aaa?q=x - >是的,这没关系
  • aaa - >是的,这不行

4 个答案:

答案 0 :(得分:4)

您定义的正则表达式是一个字符类。相反,尝试:

^\/[/.a-zA-Z0-9-]+$

答案 1 :(得分:3)

  

换句话说,以/开头的字符串允许使用字母数字   值,并且不允许任何其他特殊字符,除了这些:/,。, -

您缺少一些在网址中有效的字符

import string
import urllib
import urlparse

valid_chars = string.letters + string.digits + '/.-~'
valid_paths = []

urls = ['http://www.my.uni.edu/info/matriculation/enroling.html',
    'http://info.my.org/AboutUs/Phonebook',
    'http://www.library.my.town.va.us/Catalogue/76523471236%2Fwen44--4.98',
    'http://www.my.org/462F4F2D4241522A314159265358979323846',
        'http://www.myu.edu/org/admin/people#andy',
        'http://www.w3.org/RDB/EMP?*%20where%20name%%3Ddobbins']

for i in urls:
   path = urllib.unquote(urlparse.urlparse(i).path)
   if path[0] == '/' and len([i for i in path if i in valid_chars]) == len(path):
        valid_paths.append(path)

答案 2 :(得分:0)

试试这个:

^(?/ [A-ZA-Z0-9 .-&安培;&安培; [^ /]] *)+ $

似乎工作。看图: enter image description here

答案 3 :(得分:0)

尝试发布更多代码。我无法弄清楚你是如何使用你的问题中的正则表达式的。令我困惑的是,你的表达[^/+a-zA-Z0-9.-]基本上说:

匹配单个字符,如果是:

不是/ 或a-z(上限和下限)或0-9 或点或短划线

如果不知道你如何使用它,对我来说没有多大意义,因为它只匹配一个charactre而不是整个URL字符串。

我不确定我理解为什么你不能以/开头。