Python,提取主机名的特殊情况?

问题描述 投票:0回答:1

我见过类似的问题,但我的问题完全不同,我无法单独解决。

给定一行文本,我只想提取主机名,下面是我期望的输入-输出对的示例:

一些很酷的文本 google.ru.ts -> google.ru.ts

忽略 google.com 忽略 -> google.com

google.com/sign_in.htm -> google.com

13.59.135.97/wp-includes/fqhw5-6k88r-dgufy.view/ -> 13.59.135.97

我找到了一个正则表达式来匹配主机名,但它有一些问题:

hostname_pattern = re.compile(r'(?:https?://)?(?:www\.)?([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\b')

对于第三个示例,我在输出中得到

in.htm
(除了 google.com 之外)

对于第四个,它返回 fqhw5-6k88r-dgufy.view

我该如何解决这个问题?

python python-3.x regex hostname
1个回答
0
投票

我在正则表达式中添加了前缀

\b
,所以它看起来像这样:

hostname_pattern = re.compile(r'(?:https?://)?(?:www\.)?([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\b')

现在它不会匹配

in.html
。这解决了第三个样本。 对于第四个示例,您忘记在正则表达式中包含
0 - 9
范围和
+
符号。所以最终的正则表达式将如下所示:

r'\b(?:https?://)?(?:www\.)?([a-zA-Z0-9.-]+\.[a-zA-Z0-9.]{2,})\b'

这是我的文本代码:

inputs = [ i.split('>')[0].strip()  for i in """    Some Cool Text google.ru.ts -> google.ru.ts
    Ignore google.com Ignore -> google.com
    google.com/sign_in.htm -> google.com
    13.1234.1.321/wp-includes/fqhw5-6k88r-dgufy.view/ -> 13.59.135.97""".split('\n')]

regex = r'\b(?:https?://)?(?:www\.)?([a-zA-Z0-9.-]+\.[a-zA-Z0-9.]{2,})\b'
for i  in inputs:
    print(re.findall(regex, i))

这是输出:

['google.ru.ts']
['google.com']
['google.com']
['13.1234.1.321', 'fqhw5-6k88r-dgufy.view']

现在它仍然返回第四种情况的另一个“匹配”,但是您只需从返回的列表中取出第一个元素就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.