域名的python正则表达式

2024-04-24 13:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用下面的正则表达式从文本中提取域名,但它什么也不产生,有什么问题吗?我不知道这是否适合问这个“修复代码”的问题,也许我应该读更多。我只是想节省点时间。 谢谢

pat_url = re.compile(r'''

            (?:https?://)*

            (?:[\w]+[\-\w]+[.])*

            (?P<domain>[\w\-]*[\w.](com|net)([.](cn|jp|us))*[/]*)

            ''')

print re.findall(pat_url,"http://www.google.com/abcde")

我希望输出为google.com


Tags: 代码https文本recomurlnetdomain
3条回答

这是用regex解析url的唯一正确方法:

它是C++的,但通过删除附加值,你会发现微不足道的转换为Python。以及捕获的枚举。

另请参阅RFC3986作为regexp的原始源代码。

static const char* const url_regex[] = {
    /* RE_URL */
    "^(([^:/?#]+):)?(//([^/?#]*)|///)?([^?#]*)(\\?[^#]*)?(#.*)?",
};

enum {
    URL = 0,
    SCHEME_CLN = 1,
    SCHEME  = 2,
    DSLASH_AUTH = 3,
    AUTHORITY = 4,
    PATH    = 5,
    QUERY   = 6,
    FRAGMENT = 7
};

不要用regex来做这个。改用urlparse标准库。它更简单,更易于阅读/维护。

http://docs.python.org/library/urlparse.html

第一个是在对re.compile()的调用中缺少re.VERBOSE标志。第二个是应该对返回的对象使用方法。第三种是使用正则表达式,其中stdlib中已经存在适当的解析器。

相关问题 更多 >