如何使用正则表达式阅读访问日志主机?

2024-09-27 21:27:09 发布

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

我有这样的条目:

e179206120.adsl.alicedsl.de
safecamp-plus-2098.unibw-hamburg.de
p5B30EBFE.dip0.t-ipconnect.de

我只想匹配主域名

alicedsl.de
unibw-hamburg.de
t-ipconnect.de

我试过这个\.\w+\.\w+\.\w{2,3},但是匹配.adsl.alicedsl.de


Tags: 条目deplus域名adslhamburgdip0ipconnect
3条回答

你可以用下面的数据。你知道吗

[^.]+\.[^.]+$

^{}

如果您对使用外部库没有限制,请查看TLD extract library

https://pypi.python.org/pypi/tldextract

import tldextract
for input in ["e179206120.adsl.alicedsl.de", "safecamp-plus-2098.unibw-hamburg.de", "p5B30EBFE.dip0.t-ipconnect.de"]:
    input_tld = tldextract.extract(input)
    print input_tld.domain+"."+input_tld.suffix

[^.]+\.\w+$

See it work

或者,在Python中:

import re

tgt='''\
e179206120.adsl.alicedsl.de
safecamp-plus-2098.unibw-hamburg.de
p5B30EBFE.dip0.t-ipconnect.de'''

print re.findall(r'([^.]+\.\w+$)', tgt, re.M | re.S)
# ['alicedsl.de', 'unibw-hamburg.de', 't-ipconnect.de']

正则表达式解释:

  1. [^.]+除文字.之外的1个或多个字符
  2. \.literal.它需要\,因为如果不使用它,它将是regex的任何chaarcter
  3. \w+[a-z] [A-Z] [0-9] [_]范围内的一个或多个字符可能是[a-zA-Z]+,因为没有任何不是ASCII的旧的TLD。如果您想管理较新的Internationalized TLD's,您需要一个不同的正则表达式。你知道吗
  4. $行结尾的断言

你应该知道你对TLD的定义是不完整的。例如,这个regex方法将破坏bbc.co.uk的合法url和许多其他包含公共SLD的url。如果可以的话,可以使用一个库来获得更广泛的适用性。您还可以使用mozilla list of TLD and SLD's来知道何时应该在host的定义中包含两个句点。你知道吗

相关问题 更多 >

    热门问题