为了账号安全,请及时绑定邮箱和手机立即绑定

列表中项目的 Python 正则表达式

列表中项目的 Python 正则表达式

MM们 2023-01-04 14:17:22
我有一个列表cols如下:['Wed Estimate 6/10', 'Thu Estimate 6/11', 'Fri Estimate 6/12', 'Next Estimate 6/15-6/19']当我尝试以下操作时:re.findall(r'\s\d/\d\w-\d/\d\w', cols[3])我明白[' 6/15-6/19']了,但是当我尝试时[re.findall(r'\s\d/\d\w|\s\d/\d\w-\d/\d\w', x) for x in cols]我得到[[' 6/10'], [' 6/11'], [' 6/12'], [' 6/15']]我想实现以下目标:[[' 6/10'], [' 6/11'], [' 6/12'], [' 6/15-6/19']]我不确定为什么正则表达式的行为如上所述。
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

您可以尝试以下操作吗:


import re

lst = ['Wed Estimate 6/10', 'Thu Estimate 6/11', 'Fri Estimate 6/12', 'Next Estimate 6/15-6/19']

lst_new = [re.findall(r'\d+\/\d+(?:-\d+\/\d+)?', x) for x in lst]

print(lst_new)

退货:


[['6/10'], ['6/11'], ['6/12'], ['6/15-6/19']]

该模式并不太难,但我没有使用交替,而是使用了一个可选的非捕获组来用于##/##-##/##模式。我相信这会更快地产生结果。


以上将排除前导空格。不确定这是否是特定要求。此外,如果您想将##/##模式中的数字数量限制为最多两个,则可以\d{1,2}\/\d{1,2}(?:-\d{1,2}\/\d{1,2})?改用。


另一个注意事项;如果字符串不会比此示例数据更复杂,您也可以拆分字符串。例如:


lst_new = [[x.rpartition(' ')[2]] for x in lst]

要么:


lst_new = [[x.rsplit(' ', 1)[1]] for x in lst]


查看完整回答
反对 回复 2023-01-04
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信