我需要为列表(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]
来获取第一个元素。
在_([^_]+)_
之后是[^_]*$
,它是任意数字*
,字符串$
之前除了下划线以外的任意字符。