7 python regex string python-3.x pandas
dataframe = pd.DataFrame({'Date':['This 1A1619 person BL171111 the A-1-24',
'dont Z112 but NOT 1-22-2001',
'mix: 1A25629Q88 or A13B ok'],
'IDs': ['A11','B22','C33'],
})
Date IDs
0 This 1A1619 person BL171111 the A-1-24 A11
1 dont Z112 but NOT 1-22-2001 B22
2 mix: 1A25629Q88 or A13B ok C33
Run Code Online (Sandbox Code Playgroud)
我上面有数据框。我的目标是替换所有混合的单词/数字组合,不带连字符,-例如1A1619Ior BL171111或A13Bbut NOT 1-22-2001或A-1-24字母M。我试图通过使用正则表达式识别字母/数字组合并存储在字典中来使用以下代码
dataframe['MixedNum'] = dataframe['Date'].str.replace(r'(?=.*[a-zA-Z])(\S+\S+\S+)','M')
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个输出
Date IDs MixedNum
0 This 1A1619 person BL171111 the A-1-24 A11 M M M M M M M
1 dont Z112 but NOT 1-22-2001 B22 M M M M 1-22-2001
2 mix: 1A25629Q88 or A13B ok C33 M M or M ok
Run Code Online (Sandbox Code Playgroud)
当我真的想要这个输出时
Date IDs MixedNum
0 This 1A1619 person BL171111 the A-1-24 A11 This M person M the A-1-24
1 dont Z112 but NOT 1-22-2001 B22 dont M but NOT 1-22-2001
2 mix: 1A25629Q88 or A13B ok C33 mix: M or M ok
Run Code Online (Sandbox Code Playgroud)
我也尝试过这里建议的正则表达式,但对我也不起作用。正则 表达式替换混合数字和字符串
谁能帮我修改我的正则表达式? r'(?=.*[a-zA-Z])(\S+\S+\S+
您可以使用
pat = r'(?<!\S)(?:[a-zA-Z]+\d|\d+[a-zA-Z])[a-zA-Z0-9]*(?!\S)'
dataframe['MixedNum'] = dataframe['Date'].str.replace(pat, 'M')
Run Code Online (Sandbox Code Playgroud)
输出:
>>> dataframe
Date IDs MixedNum
0 This 1A1619 person BL171111 the A-1-24 A11 This M person M the A-1-24
1 dont Z112 but NOT 1-22-2001 B22 dont M but NOT 1-22-2001
2 mix: 1A25629Q88 or A13B ok C33 mix: M or M ok
Run Code Online (Sandbox Code Playgroud)
图案细节
(?<!\S)- 空格或字符串开头应紧接在当前位置之前(?:[a-zA-Z]+\d|\d+[a-zA-Z])- 任何一个
[a-zA-Z]+\d- 1+ 个字母和一个数字|- 或者\d+[a-zA-Z]- 1+位数字和一个字母[a-zA-Z0-9]*- 0+数字或字母(?!\S)- 空格或字符串结尾应紧跟在当前位置之后。| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |