在字符串中查找和提取多个子字符串?

时间:2016-10-17 04:41:15

标签: python regex string substring

在查看a few similar questions后,我无法在数据上成功实现子字符串拆分。对于我的具体情况,我有一堆字符串,每个字符串都有一个我需要提取的子字符串。这些字符串在一个列表中组合在一起,我的数据是NBA职位。我需要提取职位(' PG',' SG',' SF',' PF'或' C')来自每个字符串。有些字符串会有多个位置。这是数据。

text = ['Chi\xa0SG, SF\xa0\xa0DTD','Cle\xa0PF']

理想情况下,代码应该查看第一个字符串'Chi\xa0SG, SF\xa0\xa0DTD',然后返回['SG','SF']这两个位置。代码应查看第二个字符串并返回['PF']

2 个答案:

答案 0 :(得分:2)

杠杆(零宽度)外观:

(?<!\w)PG|SG|SF|PF|C(?!\w)
  • (?<!\w)是零宽度负向后视模式,确保所需的匹配不在任何字母数字之前

  • PG|SG|SF|PF|C匹配任何所需的模式

  • (?!\w)是零宽度负前瞻模式,确保匹配不会被任何字母数字所跟随

示例:

In [7]: s = 'Chi\xa0SG, SF\xa0\xa0DTD'

In [8]: re.findall(r'(?<!\w)PG|SG|SF|PF|C(?!\w)', s)
Out[8]: ['SG', 'SF']

答案 1 :(得分:0)

heemayl的回答是最正确的,但你可能可以通过分裂逗号而只保留最后两个(或者在最后一个C&#39;最后一个)的字符中每个子串。

s = 'Chi\xa0SG, SF\xa0\xa0DTD'
fin = list(map(lambda x: x[-2:] if x != 'C' else x[-1:],s.split(',')))

我现在无法测试这个,因为我在Chromebook上,但它应该有效。