Python在模式后用引号引起来的文本

时间:2020-05-11 23:02:02

标签: python re

我想在出现“名称”模式后用引号引起来。

示例字符串为: info = "name: joe", "name: jerry", "name: kate"

这是我在做什么:

import re

string = 'info = "name: joe", "name: jerry", "name: kate"'
array = re.findall(r'"(.*?)"', string)
for x in array:
       x = x.replace(" ","") #remove spaces because there might be space before colon occasionally 
       print(x.split("name:")[1])

输出显示:

joe
jerry
kate

我只是想知道是否有比我更简单的方法来执行此操作并返回相同的输出。

2 个答案:

答案 0 :(得分:1)

尝试:

res=list(re.findall(r'\"name: ([^\"]+)"', string))

print(res)

2件重要的事情-您只提取了一个组,因此提取了方括号,并且将名称定义为一个或多个字符的集合,这些字符不是双引号",因为正则表达式是默认贪婪的(即仅匹配最长的匹配项。

输出:

['joe', 'jerry', 'kate']

答案 1 :(得分:1)

您可以在正则表达式中嵌入name:模式,通过\s*占冒号前的偶数空格,还可以将冒号和实际名称后的一个或多个空格(从):

re.findall(r'"name\s*:\s+(.*?)"', string)
# ['joe', 'jerry', 'kate']