【问题标题】:Python regex for items in a list列表中项目的 Python 正则表达式
【发布时间】:2023-03-24 07:03:01
【问题描述】:

我有一个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']]

我不确定为什么正则表达式的行为如上。

【问题讨论】:

    标签: python regex list python-3.8


    【解决方案1】:

    您可以尝试以下方法吗:

    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]
    

    【讨论】:

      猜你喜欢
      • 2016-09-27
      • 2012-09-02
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多