Python正则表达式查找特定单词后的所有匹配项

2024-09-25 00:30:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串如下 "Server: myserver.mysite.com\r\nAddress: 111.122.133.144\r\n\r\nName: myserver.mysite.com\r\nAddress: 123.144.412.111\r\nAliases: alias1.myserver.mysite.com\r\n\t myserver.mysite.com\r\n\r\n"

我目前正在努力用python编写一个函数,该函数将查找所有别名并将它们放在一个列表中。所以基本上,我需要一个列表,它将是['alias1.myserver.mysite.com', 'myserver.mysite.com']

我尝试了以下代码

pattern = '(?<=Aliases:  )([\S*]+)'
name =  re.findall(pattern, mystring)

但它只匹配第一个别名,而不是两个别名

有什么想法吗

非常感谢


Tags: 函数字符串代码namecom列表serverpattern
2条回答

试试这个:

import re
regex = re.compile(r'[\n\r\t]')
t="Server:  myserver.mysite.com\r\nAddress:  111.122.133.144\r\n\r\nName:    myserver.mysite.com\r\nAddress:  123.144.412.111\r\nAliases:  alias1.myserver.mysite.com\r\n\t  myserver.mysite.com\r\n\r\n"
t = regex.sub(" ", t)
t = t.split("Aliases:")[1].strip().split()
print(t)

请尝试以下操作:

import re

s = "Server:  myserver.mysite.com\r\nAddress:  111.122.133.144\r\n\r\nName:    myserver.mysite.com\r\nAddress:  123.144.412.111\r\nAliases:  alias1.myserver.mysite.com\r\n\t  myserver.mysite.com\r\n\r\n"

l = re.findall(r'\S+', s.split('Aliases:  ')[1])
print(l)

印刷品:

['alias1.myserver.mysite.com', 'myserver.mysite.com']

解释

首先,我们将字符串分成两部分,并用s.split('Aliases: ')[1]保留第二部分。这将计算为“别名:”后面的字符串部分

接下来,我们将findall与正则表达式一起使用:

\S+

这将匹配一个或多个非空格字符的所有连续字符串

但在这种情况下,这可以更简单地完成,而无需使用正则表达式:

s = "Server:  myserver.mysite.com\r\nAddress:  111.122.133.144\r\n\r\nName:    myserver.mysite.com\r\nAddress:  123.144.412.111\r\nAliases:  alias1.myserver.mysite.com\r\n\t  myserver.mysite.com\r\n\r\n"

l = s.split('Aliases:  ')[1].split()
print(l)

相关问题 更多 >