Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 方括号在正则表达式中没有转义_Python_Regex_Url - Fatal编程技术网

Python 方括号在正则表达式中没有转义

Python 方括号在正则表达式中没有转义,python,regex,url,Python,Regex,Url,我是Python初学者。Python版本3.8和3.9 在现有的URL验证代码中,我遇到了包含“[”的密码问题。密码是PN-[.d.g5(R{bK}[5ZLx,4~K*hHrSy32=q+ 网址: 失败的代码使用validators==0.18.1包: if validators.url(url): //other code 我检查了,它使用以下用户名和密码: # user:pass authentication r"(?:[-a-z\u00a1-\uffff0-9._~%!$&am

我是Python初学者。Python版本3.8和3.9

在现有的URL验证代码中,我遇到了包含“[”的密码问题。密码是PN-[.d.g5(R{bK}[5ZLx,4~K*hHrSy32=q+

网址:

失败的代码使用validators==0.18.1包:

if validators.url(url):
//other code
我检查了,它使用以下用户名和密码:

# user:pass authentication
r"(?:[-a-z\u00a1-\uffff0-9._~%!$&'()*+,;=:]+"
r"(?::[-a-z0-9._~%!$&'()*+,;=:]*)?@)?"
我决定使用上述正则表达式编写一个简单的测试,但添加了方括号作为有效输入

  • 我在SOF和其他地方读到很多帖子,其中建议使用“”来避开方括号。这不起作用
  • 添加方括号中的Unicode值是徒劳的
  • 尝试了urllib.urlparse而不是验证程序

有什么建议吗?

有问题的密码中也有大括号,所以你也需要添加它们

r“(?::[-a-z0-9.\u\[\]\{\}~%!$&'()*+,;=:]*)?”

重新导入
ip_middle_octet=r“(?:\(?:1?\d{1,2}2[0-4]\d | 25[0-5])”
ip|u last_octet=r“(?:\(?:0|[1-9]\d?| 1\d\d|2[0-4]\d|25[0-5])”
regex=re.compile(#noqa:W605
r“^”
#协议标识符
r“(?:(?:https?| ftp):/)”
#用户:通过身份验证
r“(?:[-a-z\u00a1-\uffff0-9.u0%!$&'()*+,;=:]+”
r“(?::[-a-z0-9.\[\]\{\}%!$&'()*+,;=:]*)?@”
r“(?:”
r“(?P”
#IP地址排除
#专用和本地网络
r“(?:(?:10 | 127)”+ip_中间八位组+r“{2}”+ip_最后八位组+r”)|”
r“(?:(?:169\.254 | 192\.168)”+ip_中间八位字节+ip_最后八位字节+r”)”
r“(?:172\(?:1[6-9]| 2\d | 3[0-1])”+ip_中间八位组+ip_最后八位组+r”)”
r“|”
#专用和本地主机
r“(?P”
r“(?:本地主机))”
r“|”
#IP地址点符号八位字节
#不包括环回网络0.0.0.0
#不包括保留空间>=224.0.0.0
#不包括网络和广播地址
#(每个类别的第一个和最后一个IP地址)
r“(?P”
r“(?:[1-9]\d?| 1\d\d | 2[01]\d | 22[0-3])”
r'+ip_中八位组+r'{2}
r“+ip最后八位字节+r”)
r“|”
#IPv6正则表达式来自https://stackoverflow.com/a/17871737
r“\[(”
# 1:2:3:4:5:6:7:8
r“([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|”
# 1::                              1:2:3:4:5:6:7::
r“([0-9a-fA-F]{1,4}:){1,7}:|”
# 1::8             1:2:3:4:5:6::8  1:2:3:4:5:6::8
r“([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|”
# 1::7:8           1:2:3:4:5::7:8  1:2:3:4:5::8
r“([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}”
# 1::6:7:8         1:2:3:4::6:7:8  1:2:3:4::8
r“([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}”
# 1::5:6:7:8       1:2:3::5:6:7:8  1:2:3::8
r“([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}”
# 1::4:5:6:7:8     1:2::4:5:6:7:8  1:2::8
r“([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}”
# 1::3:4:5:6:7:8   1::3:4:5:6:7:8  1::8
r“[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})”
# ::2:3:4:5:6:7:8  ::2:3:4:5:6:7:8 ::8       ::
r:(:[0-9a-fA-F]{1,4}){1,7}|:)|”
#fe80::7:8%eth0 fe80::7:8%1
#(使用区域索引链接本地IPv6地址)
r“fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|”
r:“(ffff(:0{1,4}){0,1}:){0,1}”
r“((25[0-5]|(2[0-4]| 1{0,1}[0-9]){0,1}[0-9])\{3,3}”
#::255.255.255.255::ffff:255.255.255::ffff:0:255.255.255.255
#(IPv4映射IPv6地址和IPv4转换地址)
r“(25[0-5]|(2[0-4]| 1{0,1}[0-9]){0,1}[0-9])|”
r“([0-9a-fA-F]{1,4}:){1,4}:”
r“((25[0-5]|(2[0-4]| 1{0,1}[0-9]){0,1}[0-9])\{3,3}”
#2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33
#(IPv4嵌入式IPv6地址)
r“(25[0-5]|(2[0-4]| 1{0,1}[0-9]){0,1}[0-9])”
r“\]”
#主机名
r“(?:(?:(?:xn-)|[a-z\u00a1-\uffff\U00010000-\U0010ffff0-9]-?)*”
r“[a-z\u00a1-\uffff\U00010000-\U0010ffff0-9]+)”
#域名
r“(?:\(?:(?:xn-)|[a-z\u00a1-\uffff\U00010000-\U0010ffff0-9]-?)*”
r“[a-z\u00a1-\uffff\U00010000-\U0010ffff0-9]+)*”
#TLD标识符
r“(?:\。(?:(?:xn--[a-z\u00a1-\uffff\U00010000-\U0010ffff0-9]{2,})”
r“[a-z\u00a1-\uffff\U00010000-\U0010ffff]{2,}”)
"
#端口号
r“(?::\d{2,5})?”
#资源路径
r“(?:/[-a-z\u00a1-\uffff\U00010000-\U0010ffff0-9.0000;%!$&'()*+,;=:@/])”
#查询字符串
r“(?:\?\S*)?”
#碎片
r“(?:#\S*)?”
r“$”,
re.UNICODE | re.IGNORECASE
)
断言regex.match(“http://foo:bar@例如:"example.com"
断言regex.match(“http://foo:b[a]r@example.com")
断言regex.match(“http://foo:PN-[d.g5(R{bK}[5ZLx,4~K*hHrSy32=q+@example.com”)

鉴于上述情况,你需要更换
-a-z\u00a1-\uffffffffffffff0-9.9.[uuu10%!$&(*+,;::::,,;:::,,,;:::,,,,,,,,,,,,,,,似乎似乎似乎似乎卷卷曲的卷曲支撑似乎似乎似乎似乎似乎也是罪犯。你需要。你需要更换你需要取代,你需要取代
>-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-c。你需要,你需要,你,你,你需要,你,你似乎似乎,你似乎,你似乎是,你的,你似乎是:::::}[\]]*)?@)?
,请参阅和。在测试过程中,我意识到即使对于许多其他特殊字符,它也会失败,需要进行大量更改。在测试过程中,我意识到即使对于许多其他特殊字符,它也会失败,需要进行大量更改。
# user:pass authentication
r"(?:[-a-z\u00a1-\uffff0-9._~%!$&'()*+,;=:]+"
r"(?::[-a-z0-9._~%!$&'()*+,;=:]*)?@)?"
#user:pass authentication
r"(?:[-a-z\u00a1-\uffff0-9._~%!$&'()*+,;=:]+"
r"(?::[-a-z0-9._\[\]~%!$&'()*+,;=:]*)?@)?"
def url_parse(url):
    try:
        result = urlparse(url)
        return all([result.scheme, result.netloc])
    except ValueError:
        return False