鉴于此字符串:
"Group <stuffhere> User <IwantThis> IP <notimportant> Address <IalsoWantThis> assigned"
,
如何在“用户”和地址之后提取括号中的内容。 那是我想取上面的字符串并返回
(IwantThis, IalsoWantThis)
答案 0 :(得分:3)
试试这个,它会匹配<>
:
s = "Group <stuffhere> User <IwantThis> IP <notimportant> Address <IalsoWantThis> assigned"
ans = re.findall(r'<(.+?)>', s)
现在很容易提取我们感兴趣的部分:
ans[1]
=> 'IwantThis'
ans[3]
=> 'IalsoWantThis'
答案 1 :(得分:1)
你的正则表达式看起来像这样
"Group .*? User (.*?) IP .*? Address (.*?) assigned"
在这里,.*?
表示尽可能少的字符,但是尽可能多的字符,所以其余的适合&#34;。此外,它涵盖任何字符(包括空格等)。您想要的部分使用()
进行分组。然后你可以做
>>> import re
>>> regex = "Group .*? User (.*?) IP .*? Address (.*?) assigned"
>>> match = re.match(regex, data)
如果match
不是None
,则模式匹配,您可以使用match.groups
访问这些组:
>>> IwantThis, IalsoWantThis = match.groups()
请注意如果您的数据实际上包含括号(我认为它们是占位符),则需要将(.*?)
替换为<(.*?)>
,以便括号为不匹配。对于未分组的部分(仅.*?
没有括号的部分),这不是必需的,因为它们的数据永远不会被查询。
当且仅当时,您的值(<stuffhere>
,<IwantThis>
,<notimportant>
和<IalsoWantThis>
)才会不包含空格,您不需要使用正则表达式,而是可以使用string.split
代替:
>>> split_string = data.split()
>>> IwantThis = split_string[3]
>>> IalsoWantThis = split_string[7]
答案 2 :(得分:1)
我的回答只是替代我之前已经说过的人
import re
searchText = "Group <stuffhere> User <IwantThis> IP <notimportant> Address <IalsoWantThis> assigned"
result = re.sub(".*User\\s+<([^>]+).*Address\\s+<([^>]+).*", "\\1 \\2", searchText)
print(result)
这里的正则表达式是
.*User\s+<([^>]+).*Address\s+<([^>]+).*
编辑:如果你想返回元组,试试这个:
result2 = re.findall(".*User\\s+<([^>]+).*Address\\s+<([^>]+).*", searchText)
print(result2[0])