Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的正则表达式,用于匹配单词后和尖括号之间的文本_Python_Regex - Fatal编程技术网

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

Python中的正则表达式,用于匹配单词后和尖括号之间的文本,python,regex,Python,Regex,给定此字符串: “分配的组用户IP地址” 如何提取“User”和Address后面括号中的内容。 也就是说,我想取上面的字符串并返回 (IwantThis, IalsoWantThis) 尝试此操作,它将匹配之间的所有文本: 你的正则表达式可能是这样的 "Group .*? User (.*?) IP .*? Address (.*?) assigned" 在这里,*?的意思是“尽可能少的字符,但尽可能多的字符是必要的,这样剩下的字符就适合了”。此外,它还覆盖任何字符(包括空格等)。使用()

给定此字符串:
“分配的组用户IP地址”

如何提取“User”和Address后面括号中的内容。 也就是说,我想取上面的字符串并返回

(IwantThis, IalsoWantThis)

尝试此操作,它将匹配
之间的所有文本:


你的正则表达式可能是这样的

"Group .*? User (.*?) IP .*? Address (.*?) assigned"
在这里,
*?
的意思是“尽可能少的字符,但尽可能多的字符是必要的,这样剩下的字符就适合了”。此外,它还覆盖任何字符(包括空格等)。使用
()
对所需零件进行分组。然后你就可以做了

>>> import re
>>> regex = "Group .*? User (.*?) IP .*? Address (.*?) assigned"
>>> match = re.match(regex, data)
如果
match
不是
None
,则模式匹配,您可以使用
match.groups
访问组:

>>> IwantThis, IalsoWantThis = match.groups()
请注意,如果您的数据实际上包含括号(我假设它们是占位符),则需要将
(.*)
替换为
,以便括号不匹配。对于未分组的零件(那些只有
*?
没有括号的零件),这是不必要的,因为它们的数据从未被查询过

如果且仅当值(
)不包含空格,则不需要使用正则表达式,而可以使用
字符串。拆分

>>> split_string = data.split()
>>> IwantThis = split_string[3]
>>> IalsoWantThis = split_string[7]

我的回答只是我前面的人已经说过的话的另一种选择

import re
searchText = "Group <stuffhere> User <IwantThis> IP <notimportant> Address <IalsoWantThis> assigned"
result = re.sub(".*User\\s+<([^>]+).*Address\\s+<([^>]+).*", "\\1 \\2", searchText)
print(result)
重新导入
searchText=“分配的组用户IP地址”
result=re.sub(“.*User\\s++).*Address\\s++).*”,“\\1\\2”,searchText)
打印(结果)
这里的正则表达式是

.*User\s+<([^>]+).*Address\s+<([^>]+).*
*用户\s++.*地址\s++)*
编辑:如果要返回元组,请尝试以下操作:

result2 = re.findall(".*User\\s+<([^>]+).*Address\\s+<([^>]+).*", searchText)
print(result2[0])
result2=re.findall(“.*User\\s++”).*Address\\s++*),searchText)
打印(结果2[0])

您的数据中是否有这些括号,或者它们只是占位符?
.*User\s+<([^>]+).*Address\s+<([^>]+).*
result2 = re.findall(".*User\\s+<([^>]+).*Address\\s+<([^>]+).*", searchText)
print(result2[0])