我想从列表的每一项中提取子字符串。子字符串必须放在'opt_'
前缀之后,并且字符串中不能有'_join'
后缀
我的意见:
my_opts = [
'opt_tw',
'opt_ls_join',
'opt_ac_join',
'opt_pan_join',
'opt_full_led',
]
期望输出:
['tw', 'full_led']
我所尝试的:
>>> import re
>>> pattern = r'opt_?(.*)[^_join]'
>>> print([
... re.search(pattern, opt).group(1)
... for opt in my_opts
... if re.match(pattern, opt)
... ])
['t', 'l', 'a', 'p', 'full_le']
你能帮帮我吗
您可以使用^{} 和^{} 作为捕获组的条件和字符串切片:
其中4等于
"opt_"
的长度,并有助于在该长度之后获得子字符串得到
您可以匹配
_opt
,也可以选择匹配直到最后一次出现_
然后在字符串末尾断言not
join
,并在组1中捕获其余部分opt_
逐字匹配(
捕获组1(?:.*_)?
可以选择匹配,直到最后一次出现_
(?!join$)
负前瞻,在字符串末尾断言not join[^\r\n_]+
匹配1+乘以除_
(或换行符)以外的任何字符)
关闭组1$
字符串的结尾REgex demo
输出
如果字符串不应包含
_join
,则可以使用负前瞻Regex demo
相关问题 更多 >
编程相关推荐