Python正则表达式:从字符串结尾匹配(反向)

时间:2013-06-05 16:40:43

标签: python regex python-2.7

我希望将字符串与以下条件匹配:

  • 匹配任何字母,然后是“。”,后跟字母,后跟行尾。

例如,对于字符串'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']
>>>

上面的代码段完美无缺。但我相信必须有一种更优雅的方式来实现同样的目标。

是否可以从字符串的结尾开始正则表达式搜索/匹配,向字符串的开头移动?如何编写那种类型的正则表达式?或者我应该使用正则表达式吗?

2 个答案:

答案 0 :(得分:1)

我不确定您的示例是否只是尝试获取域名的最后两部分,或者您是否尝试删除这些数字。如果您只想要域的最后部分,可以执行以下操作:

for i in my_string.split():
     '.'.join(i.split('.')[-2:])

此:

  1. 将每个字符串拆分为单词列表,拆分为“。”最初是,然后
  2. 将最后两个单词组合成一个字符串,带有'。'分离器。
  3. 或者,像这样:

    >>> 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这样的域名,所以我会考虑使用更强大的东西。如果您不介意在脚本中添加更多依赖项,那么会有一个名为tldextractpip install tldextract)的模块,这使得这非常简单:

import tldextract

def get_domain(url):
    result = tldextract.extract(url)

    return result.domain + '.' + result.tld