gpt4 book ai didi

python - RegEx 用于在最后一个连字符之前提取一定数量的字符

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:57 24 4
gpt4 key购买 nike

您好,我想提取数据框列中的日期,日期由“-”或“to”分隔

 pop       DATE                     
0 1.5 OWREAP-01/06/18to30/06/18
1 1.7 OW - 01/07/18 - 30/08/18
2 3.6 BCREAP - 01/08/18 to 30/08/18
3 2.4 BCGRA TO 01/08/18 to 30/08/18

我试图用“-”替换“to”和“TO”

df['DATE'].str.replace('to|TO','-')
pop DATE
0 1.5 OWREAP-01/06/18-30/06/18
1 1.7 OW - 01/07/18 - 30/08/18
2 3.6 BCREAP - 01/08/18 - 30/08/18
3 2.4 BCGRA - 01/08/18 - 30/08/18

现在我需要知道如何提取最后一个连字符前后的 8 个字符即

 pop       type   startdate enddate                    
0 1.5 OWREAP 01/06/18 30/06/18
1 1.7 OW 01/07/18 30/08/18
2 3.6 BCREAP 01/08/18 30/08/18
3 2.4 BCGRA 01/08/18 30/08/18

最佳答案

你可以使用

reg = r'(?i).*(\d{2}/\d{2}/\d{2}(?:\d{2})?)\s*(?:TO|-)\s*(\d{2}/\d{2}/\d{2}(?:\d{2})?)'
df[['startdate','enddate']] = df.pop('DATE').str.extract(reg)

参见 regex demo .

详情

  • (?i) - 不区分大小写的标志
  • .* - 任何 0+ 个字符,尽可能多
  • (\d{2}/\d{2}/\d{2}(?:\d{2})?) - 开始日期捕获组:2 位数字,/, 2 位数字, /, 2 或 4 位数字
  • \s* - 0+ 个空格
  • (?:to|-) - to-
  • \s*
  • \s* - 0+ 个空格
  • (\d{2}/\d{2}/\d{2}(?:\d{2})?) - 结束日期捕获组:2 位数字,/, 2 位数字, /, 2 或 4 位数字

Python 测试:

df = pd.DataFrame( {'DATE': ["OWREAP-01/06/18to30/06/18"],
'dummy': ["value"]})
reg = r'(?i).*(\d{2}/\d{2}/\d{2}(?:\d{2})?)\s*(?:to|-)\s*(\d{2}/\d{2}/\d{2}(?:\d{2})?)'
df[['startdate','enddate']] = df.pop('DATE').str.extract(reg)
>>> df
dummy startdate enddate
0 value 01/06/18 30/06/18

关于python - RegEx 用于在最后一个连字符之前提取一定数量的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56097511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com