Python 列表中项目的正则表达式
Python regex for items in a list
我有一个列表 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']]
我不确定为什么正则表达式会像上面那样表现。
你可以尝试以下方法吗:
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)
Returns:
[['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]
我有一个列表 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']]
我不确定为什么正则表达式会像上面那样表现。
你可以尝试以下方法吗:
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)
Returns:
[['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]