Regex 在python中验证代理uri的正则表达式

Regex 在python中验证代理uri的正则表达式,regex,validation,proxy,Regex,Validation,Proxy,我已尝试使用正则表达式验证以下有效和无效的代理URI。我需要帮助证明python中的有效和无效场景 输入应采用以下方式: 000.0000.00.00 #invalid 912.456.123.123 #invalid 999.999.999.999:99999 #invalid 192.168.1.1

我已尝试使用正则表达式验证以下有效和无效的代理URI。我需要帮助证明python中的有效和无效场景

输入应采用以下方式:

000.0000.00.00                               #invalid
912.456.123.123                               #invalid
999.999.999.999:99999                         #invalid
192.168.1.1                                   #valid
192.168.1.1.1                                 #invalid
proxy.company.com:3128                        #valid
https://proxy.company.com:3128                #valid
https://proxy.company.com:3128/?action=list   #valid
user:pass@proxy.company.com:3128              #valid
localhost:8000                                #valid
http://localhost:8000                         #valid
3...3                                         #invalid
我的正则表达式:

(^(\w+)(?::)+((\w+))@)|(^https?:\/\/)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|(?:\.[^0-9])|(localhost)(?::(?![7-9]\d\d\d\d)(?!6[6-9]\d\d\d)(?!65[6-9]\d\d)(?!655[4-9]\d)(?!6553[6-9])(?!0+)(?P<Port>\d{1,5}))?(?:\/?|[\/?]\S+)$

我需要全面校对的帮助。

要匹配您的示例数据,一种解决方案可以是匹配ip号码,或者匹配类似url的结构,或者使用
@

^(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:https?://)?(?![\d.]+:)\w+(?:\.\w+)*:\d+\S+|\w+:\w+@(?![\d.]+:)\w+(?:\.\w+)*:\d+)$
大部分(您可以相应地进行调整)

  • ^
    字符串的开头
  • (?:
    非捕获组
    • (?:(?:25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\{3}(?:25[0-5]| 2[0-4][0-9][01]?[0-9][0-9]。
      模式
    • |
    • (?:https?:/)(?![\d.]+:)\w+(?:\。\w+*:\d+\S+
      匹配类似url的模式,该模式不能仅由冒号前的数字和点组成
    • |
    • \w+:\w+@(?![\d.]+:)\w+(?:\。\w+*:\d+
      匹配用户名和密码的模式,后跟一个
      @
  • 关闭非捕获组
  • $
    字符串结尾


注意此模式不保证完全校对,因为您的示例包含多种可能的变体。

要匹配示例数据,一种解决方案可以是匹配ip号码,或匹配类似url的结构,或使用
@

^(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:https?://)?(?![\d.]+:)\w+(?:\.\w+)*:\d+\S+|\w+:\w+@(?![\d.]+:)\w+(?:\.\w+)*:\d+)$
大部分(您可以相应地进行调整)

  • ^
    字符串的开头
  • (?:
    非捕获组
    • (?:(?:25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\{3}(?:25[0-5]| 2[0-4][0-9][01]?[0-9][0-9]。
      模式
    • |
    • (?:https?:/)(?![\d.]+:)\w+(?:\。\w+*:\d+\S+
      匹配类似url的模式,该模式不能仅由冒号前的数字和点组成
    • |
    • \w+:\w+@(?![\d.]+:)\w+(?:\。\w+*:\d+
      匹配用户名和密码的模式,后跟一个
      @
  • 关闭非捕获组
  • $
    字符串结尾


请注意此模式不能保证完全打样,因为您的示例包含多种可能的变体。

第四只鸟,感谢您的输入。这对我有用,这很不寻常。这给了我一个有效场景的错误。例如,这些不是解析<代码>10.115.27.54:3128用户:pass@10.115.27.54:3128用户:pass@https://10.115.27.54:3128 proxy.company.com用户:pass@http://10.115.27.54:3128@PranayBankar这是因为这些格式与示例数据中列出的格式不同。@PranayBankar嗯,可能有边缘情况,但是你可以像这样试试,我试过这个<(以下以下::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[A-一--Z0--10-9-9-9-9-9-9-[0.0,0.0.0,0.61}[0,0.0.0.0,0.0,10万万[0.61}[0,,,[0,[0,[0,[0,[0.0,[0,[0.61}[0,[0,[0.0[0.0.0.0,[0[0[0[0[0.0.0.0-0[0,,[0.0-0[0-9][0-9](?:(?![7-9]\d\d\d\d)(?!6[6-9]\d\d\d)(?!65[6-9]\d\d)(?!655[4-9]\d)(?!6553[6-9])(?!0+(?)(?:\/?|[\/?]\S+$第四只鸟,谢谢你的输入。这对我有用,这很不寻常。这给了我一个有效场景的错误。例如,这些不是解析<代码>10.115.27.54:3128用户:pass@10.115.27.54:3128用户:pass@https://10.115.27.54:3128 proxy.company.com用户:pass@http://10.115.27.54:3128@PranayBankar这是因为这些格式与示例数据中列出的格式不同。@PranayBankar嗯,可能有边缘情况,但是你可以像这样试试,我试过这个<(以下以下::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[A-一--Z0--10-9-9-9-9-9-9-[0.0,0.0.0,0.61}[0,0.0.0.0,0.0,10万万[0.61}[0,,,[0,[0,[0,[0,[0.0,[0,[0.61}[0,[0,[0.0[0.0.0.0,[0[0[0[0[0.0.0.0-0[0,,[0.0-0[0-9][0-9](?:(?![7-9]\d\d\d\d)(?!6[6-9]\d\d\d)(?!65[6-9]\d\d)(?!655[4-9]\d)(?!6553[6-9])(?!0+(?)(?:\/?[\/?]\S+)$