访问复杂名称中的模式

  • 本文关键字:模式 复杂 访问 python
  • 更新时间 :
  • 英文 :


我需要为列表(L)的所有条目分配一个由两个下划线分隔的特殊首字母缩略词,并从中构建一个列表(S)。下面是摘录。

L = ['13058_8pcw_Ocx_M', '13058_8pcw_M1C-S1C_M' , '13058_8pcw_AMY_F']
S = ['Ocx','M1C-S1C','AMY']

我做了很多尝试,包括正则表达式,但我没能得到我想要的。理想情况下,应该构建一个循环来创建列表S,并使用正则表达式访问l中的特定首字母缩略词。

有人能提供一些支持或解决方案吗?谢谢。

您可以使用re.findall。
NB第二个元素有2个匹配的_[^_]+_,所以我们只取最后一个,根据您的预期输出。

import re
L = ['13058_8pcw_Ocx_M', '13058_8pcw_M1C-S1C_M' , '13058_8pcw_AMY_M']
S = []
for l in L:
S.append(re.findall(r'_([^_]+)_[^_]*$',l)[0])
print(S)

输出
['Ocx', 'M1C-S1C', 'AMY']

正则表达式模式在两个下划线之间查找除下划线以外的任何字符(^表示非)。方括号表示一个类别,+表示重复1次或以上。
括号(...)内的部分是捕获组,它由函数findall作为列表返回,因此我们使用[0]来获取第一个元素。
_([^_]+)_之后是[^_]*$,它是任意数字*,字符串$之前除了下划线以外的任意字符。

最新更新