在 Python 中使用 Regex 获取特定字符串

Sar*_*iel 3 python regex python-2.7 python-3.x pandas

我有如下所示的字符串:

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
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果:预期结果:

ART0015
ADC00112
AEE00011
AQW0013
AAZ0014
AQQ0032
ADD0001
AAA0012
Run Code Online (Sandbox Code Playgroud)

我使用了下面的正则表达式代码,不幸的是,我没有得到预期的结果,因为第 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
Run Code Online (Sandbox Code Playgroud)

May*_*wal 5

使用Series.str.extract通过搜索3个字母后面4-5的数字:

In [477]: df['col'] = df['col'].str.extract(r'([a-zA-Z]{3}\d{4,5})')

In [478]: df
Out[478]: 
0   ART0015
1  ADC00112
2  AEE00011
3   AQW0013
4   AAZ0014
5   AQQ0032
6   ADD0001
7   AAA0012
Run Code Online (Sandbox Code Playgroud)