字符串后的正则表达式提取元素

时间:2012-03-26 20:37:59

标签: python regex

如果我有一个字符串s = "Name: John, Name: Abby, Name: Kate"。如何在Name:,之间提取所有内容。所以我想要一个数组a = John, Abby, Kate

谢谢!

3 个答案:

答案 0 :(得分:3)

不需要正则表达式:

>>> s = "Name: John, Name: Abby, Name: Kate"
>>> [x[len('Name: '):] for x in s.split(', ')]
['John', 'Abby', 'Kate']

甚至:

>>> prefix = 'Name: '
>>> s[len(prefix):].split(', ' + prefix)
['John', 'Abby', 'Kate']

现在,如果您仍然认为正则表达式更合适:

>>> import re
>>> re.findall('Name:\s+([^,]*)', s)
['John', 'Abby', 'Kate']

答案 1 :(得分:1)

有趣的问题是如何在Python中选择多种方法。如果你确信格式是准确的,使用“拆分”的答案是很好的。如果您希望对次要格式更改提供一些保护,则正则表达式可能很有用。您应该考虑格式的哪些部分最可能是稳定的,并在正则表达式中捕获这些部分,同时为其他部分留出灵活性。这是一个假设名称是字母的例子,“Name”和冒号一词是稳定的:

import re
s = "Name: John, Name: Abby, Name: Kate"
names = [i.group(1) for i in re.finditer("Name:\s+([A-Za-z]*)", s)]
print names

您可能希望在名称中允许使用连字符或其他字符;您可以通过更改[A-Za-z]内的文字来实现。

有关许多示例的Python正则表达式的好页面是http://docs.python.org/howto/regex.html

答案 2 :(得分:1)

有更多方法可以做到这一点

>>> s
'Name: John, Name: Abby, Name: Kate'

方法1:

>>> [x.strip() for x in s.split("Name:")[1:]]
['John,', 'Abby,', 'Kate']

方法2:

>>> [x.rsplit(":",1)[-1].strip() for x in s.split(",")]
['John', 'Abby', 'Kate']

方法3:

>>> [x.strip() for x in re.findall(":([^,]*)",s)]
['John', 'Abby', 'Kate']

方法4:

>>> [x.strip() for x in s.replace('Name:','').split(',')]
['John', 'Abby', 'Kate']

另请注意,如果'Name:'标记和实际名称之间可以有多个空格,我总是如何始终如一地应用条带。

方法2和3可以更通用的方式使用。