簡體   English   中英

Python正則表達式:從字符串結尾匹配(反向)

[英]Python Regex: Matching from end of string (reverse)

我想匹配一個字符串與以下標准:

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

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

上面的代碼片段完美無缺。 但我確信必須有一種更優雅的方式來實現同樣的目標。

是否可以從字符串的結尾開始正則表達式搜索/匹配,向字符串的開頭移動? 如何編寫那種類型的正則表達式? 或者我應該使用正則表達式?

我不確定你的例子中是否只是試圖獲取域名的最后兩部分,或者你是否試圖刪除這些數字。 如果您只想要域的最后部分,您可以執行以下操作:

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

這個:

  1. 將每個字符串拆分為單詞列表,將其拆分為“。” 原來,那時
  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']

你的正則表達式不會考慮像domain.co.uk這樣的domain.co.uk ,所以我會考慮使用更強大的東西。 如果你不介意在你的腳本中添加更多的依賴項,那么有一個名為tldextractpip install tldextract )的模塊,它非常簡單:

import tldextract

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM