首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的正则表达式

问Python中的正则表达式
EN

Stack Overflow用户
提问于 2013-05-26 20:15:56
回答 9查看 190关注 0票数 2

我正在尝试从Enom API调用构建一个域名列表。我得到了很多信息,需要找到与域名相关的行,然后将它们连接在一起。

从Enom返回的字符串看起来有点像这样:

代码语言:javascript
复制
SLD1=domain1
TLD1=com
SLD2=domain2
TLD2=org
TLDOverride=1
SLD3=domain3
TLD4=co.uk
SLD5=domain4
TLD5=net
TLDOverride=1

我想创建一个列表,如下所示:

代码语言:javascript
复制
[domain1.com, domain2.org, domain3.co.uk, domain4.net]

为了找到不同的域名组件,我尝试了以下命令(其中"enom“是上面的字符串),但只能获得SLD和TLD匹配。

代码语言:javascript
复制
re.findall("^.*(SLD|TLD).*$", enom, re.M) 
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-05-26 20:25:29

这适用于您的示例,

代码语言:javascript
复制
>>> sld_list = re.findall("^.*SLD[0-9]*?=(.*?)$", enom, re.M)
>>> tld_list = re.findall("^.*TLD[0-9]*?=(.*?)$", enom, re.M)
>>> map(lambda x: x[0] + '.' + x[1], zip(sld_list, tld_list))
['domain1.com', 'domain2.org', 'domain3.co.uk', 'domain4.net']
票数 3
EN

Stack Overflow用户

发布于 2013-05-26 20:23:24

编辑:每当我看到一个问题需要正则表达式解决方案时,我就有一种奇怪的冲动,想尝试在没有正则表达式的情况下解决它。在大多数情况下,它比使用正则表达式更有效,我鼓励OP测试哪种解决方案是最有效的。

以下是一种天真的方法:

代码语言:javascript
复制
a = """SLD1=domain1
TLD1=com
SLD2=domain2
TLD2=org
TLDOverride=1
SLD3=domain3
TLD4=co.uk
SLD5=domain4
TLD5=net
TLDOverride=1"""

b = a.split("\n")
c = [x.split("=")[1] for x in b if x != 'TLDOverride=1']
for x in range(0,len(c),2):
    print ".".join(c[x:x+2])

>> domain1.com
>> domain2.org
>> domain3.co.uk
>> domain4.net
票数 6
EN

Stack Overflow用户

发布于 2013-05-26 20:23:41

您的表达式中有一个捕获组。re.findall文档中写道:

如果模式中存在一个或多个组,则返回一个组列表;如果模式有多个组,这将是一个元组列表。

这就是为什么只返回捕获组的内容的原因。

尝试:

代码语言:javascript
复制
re.findall("^.*((?:SLD|TLD)\d*)=(.*)$", enom, re.M)

这将返回一个元组列表:

代码语言:javascript
复制
[('SLD1', 'domain1'), ('TLD1', 'com'), ('SLD2', 'domain2'), ('TLD2', 'org'), ('SLD3', 'domain3'), ('TLD4', 'co.uk'), ('SLD5', 'domain4'), ('TLD5', 'net')]

然后,组合SLD和TLD就取决于您了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16759128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档