我不是一个正则表达式专家,我正试图做一个看起来非常简单并且在python 2.7中工作的人:在没有查询字符串的情况下验证URL(没有主机名)的路径。换句话说,以/开头的字符串允许使用字母数字值,并且不允许除以下字符之外的任何其他特殊字符:/
,.
,-
我发现这个post与我需要的非常相似但是对我来说根本不起作用,我可以用例如aaa
进行测试,即使它没有,它也会返回true从/
开始。
我现在有点工作的当前正则表达式就是这个:
[^/+a-zA-Z0-9.-]
但它不适用于不以/
开头的路径。例如:
/aaa
- >是的,这没关系/aaa/bbb
- >是的,这没关系/aaa?q=x
- >是的,这没关系aaa
- >是的,这不行答案 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 .-&安培;&安培; [^ /]] *)+ $
似乎工作。看图:
答案 3 :(得分:0)
尝试发布更多代码。我无法弄清楚你是如何使用你的问题中的正则表达式的。令我困惑的是,你的表达[^/+a-zA-Z0-9.-]
基本上说:
匹配单个字符,如果是:
不是/
或a-z(上限和下限)或0-9
或点或短划线
如果不知道你如何使用它,对我来说没有多大意义,因为它只匹配一个charactre而不是整个URL字符串。
我不确定我理解为什么你不能以/
开头。