如果我有一个字符串s = "Name: John, Name: Abby, Name: Kate"
。如何在Name:
和,
之间提取所有内容。所以我想要一个数组a = John, Abby, Kate
谢谢!
答案 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可以更通用的方式使用。