Python正则表达式从文本中提取域

时间:2018-03-08 06:10:08

标签: python regex

我有以下正则表达式:

r'(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]{,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}'

当我将其应用于文本字符串时,让我们说, "这是www.website1.com,这是website2.com",我得到:

['www.website1.com']

['website.com']

如何修改正则表达式以排除'www',以便我获得'website1.com''website2.com?我错过了一些非常基本的东西......

2 个答案:

答案 0 :(得分:3)

试试这个(感谢@SunDeep进行更新):

\s(?:www.)?(\w+.com)

<强>解释

\s匹配任何空格字符

(?:www.)?非捕获组,匹配www. 0次或更多次

(\w+.com)匹配任何单词字符一次或多次,然后是.com

行动中:

import re

s = 'this is www.website1.com and this is website2.com'

matches = re.findall(r'\s(?:www.)?(\w+.com)', s)
print(matches)

输出:

['website1.com', 'website2.com']

有关这方面的几点说明。首先,匹配所有有效的域名非常困难,所以虽然我选择使用\w+来捕获此示例,但我可以选择:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}

这个答案有很多关于匹配域的有用信息: {{3}}

接下来,我只查找.com个域名,您可以将我的正则表达式调整为:

\s(?:www.)?(\w+.(com|org|net))

匹配您正在寻找的任何类型的域名。

答案 1 :(得分:0)

尝试一下:

import re
s = "www.website1.com"
k = re.findall ( '(www.)?(.*?)$', s, re.DOTALL)[0][1]
print(k)

O / P喜欢:

'website1.com'

如果它是s = "website1.com",它也会像:

'website1.com'