Python中的正则表达式,用于匹配单词之后和尖括号之间的文本

时间:2014-08-18 23:14:18

标签: python regex

鉴于此字符串: "Group <stuffhere> User <IwantThis> IP <notimportant> Address <IalsoWantThis> assigned"

如何在“用户”和地址之后提取括号中的内容。 那是我想取上面的字符串并返回

(IwantThis, IalsoWantThis)

3 个答案:

答案 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])