[英]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:])
這個:
或者,像這樣:
>>> 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
,所以我會考慮使用更強大的東西。 如果你不介意在你的腳本中添加更多的依賴項,那么有一個名為tldextract
( pip 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.