【问题标题】:regex-weburl.js of Diego Perini doesn't work on PythonDiego Perini 的 regex-weburl.js 不适用于 Python
【发布时间】:2014-04-03 23:50:06
【问题描述】:

我正在尝试在 Python 中使用Diego Perini 的 URL 提取器,但显然,我必须更改正则表达式的格式,因为它不返回任何 HTML。

gist 上有两个版本:

Javascript version

 /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i

PHP version

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

它们中的任何一个都准备好用于 Python 了吗?因为没有人工作并从文本中返回链接。

【问题讨论】:

  • 唯一的问题是 Python 是否支持UTF-16 uni-character 构造或其他东西,或者根本不支持。 Perl 只支持\x{},PCRE,Java,Dot-Net 支持\u....
  • 另外,这些正则表达式的 require (?:https?|ftp) 在字符串的开头,否则它们会立即失败。

标签: python regex


【解决方案1】:

一种方法是研究 544 页 Mastering Regular Expressions 书籍并手动找出正则表达式语言风格之间的差异(如果您有时间和热情,这绝对是个好主意)。

另一种选择是使用RegexBuddy 工具,它可以在正则表达式之间自动转换正则表达式:

您可以从 RegexBuddy 支持的任何正则表达式风格转换为任何 其他正则表达式风味。 RegexBuddy 自动替换等效项 语法。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    相关资源
    最近更新 更多