【发布时间】:2021-03-23 13:27:45
【问题描述】:
我的字符串如下所示:
ART-B-C-ART0015-D-E01
ADC-B-C-ADC00112-V-E01
AEE-B-C-AEE00011-D-E01
AQW-B-C-AQW0013-D-E01
AAZ-B-C-AAZ0014-D-E01
AQQ-B-C-AQQ0032-D-E01
ADD-B-C-D-ADD0001-D-E01
AAA-B-C-AAA0012-D-E01
我想得到以下结果: 预期结果:
ART0015
ADC00112
AEE00011
AQW0013
AAZ0014
AQQ0032
ADD0001
AAA0012
我使用了下面的正则表达式代码,不幸的是,我没有得到预期的结果,因为第 7 条记录不在第三个破折号中。它在第四个破折号中。
df["A"].str.extract(r'^(?:[^-]*-){3}\s*([^-]+)', expand=False)
0 ART0015
1 ADC00112
2 AEE00011
3 AQW0013
4 AAZ0014
5 AQQ0032
6 D
7 AAA0012
【问题讨论】:
-
那么确定提取子串的规则是什么?
-
规则是否应该在第 3 次或第 4 次破折号之后超过某个字符阈值?它是否与 3 个字母字符后跟 4 个或 5 个数字字符有关?或者,您是否只在一定数量的字符之上或之间寻找字符串而不考虑位置?看看我对后者的回答。
标签: python python-3.x regex pandas python-2.7