我希望将字符串与以下条件匹配:
例如,对于字符串'www.stackoverflow.com',正则表达式应返回'stackoverflow.com'。我有以下代码可用:
my_string = '''
123.domain.com
123.456.domain.com
domain.com
'''
>>> for i in my_string.split():
... re.findall('[A-Za-z\.]*?([A-Za-z]+\.[a-z]+)$', i)
...
['domain.com']
['domain.com']
['domain.com']
>>>
上面的代码段完美无缺。但我相信必须有一种更优雅的方式来实现同样的目标。
是否可以从字符串的结尾开始正则表达式搜索/匹配,向字符串的开头移动?如何编写那种类型的正则表达式?或者我应该使用正则表达式吗?
答案 0 :(得分:1)
我不确定您的示例是否只是尝试获取域名的最后两部分,或者您是否尝试删除这些数字。如果您只想要域的最后部分,可以执行以下操作:
for i in my_string.split():
'.'.join(i.split('.')[-2:])
此:
或者,像这样:
>>> my_string = ['123.domain.com', '123.456.domain.com', 'domain.com', 'www.stackoverflow.com']
>>> ['.'.join(i.split('.')[-2:]) for i in my_string]
['domain.com', 'domain.com', 'domain.com', 'stackoverflow.com']
答案 1 :(得分:1)
你的正则表达式不会考虑像domain.co.uk
这样的域名,所以我会考虑使用更强大的东西。如果您不介意在脚本中添加更多依赖项,那么会有一个名为tldextract
(pip install tldextract
)的模块,这使得这非常简单:
import tldextract
def get_domain(url):
result = tldextract.extract(url)
return result.domain + '.' + result.tld