在Python中使用正则表达式获取特定字符串

2024-10-03 04:36:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下类似的字符串:

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

Tags: 字符串artadcaaze01art0015adc00112add0001
3条回答

另一种在匹配后查找2-个独立子字符串的方法:

>>> df['A'].str.extract(r'([^-]+)(?:-[^-]*){2}$')
          0
0   ART0015
1  ADC00112
2  AEE00011
3   AQW0013
4   AAZ0014
5   AQQ0032
6   ADD0001
7   AAA0012

使用^{}搜索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

可以使用以下正则表达式搜索7或8个重复的字母数字字符,输出优先级越高:

df['A'] = df['A'].str.extract('-([A-Za-z0-9]{7,8})-')

      A
0   ART0015
1   ADC00112
2   AEE00011
3   AQW0013
4   AAZ0014
5   AQQ0032
6   ADD0001
7   AAA0012

相关问题 更多 >