Regex(或其他python选项pref.pandans)匹配所有非数字BUT句点、加号和减号(.,+,-)



我看到了许多类似的问题,但没有一个能解决这个问题。

df = pd.DataFrame()
df['dummy'] = ['gg-21.534wgtr..eu678+ithn']

我想要

-21.534..678+

我想真正删除那些字符,所以我的尝试,

df['dummy'].astype(str).str.replace(r'D+','')
21534678

不起作用。

regex将是我的第一选择,否则任何pandas替代方案,也就是任何python替代方案。

您应该使用

df['dummy'] = df['dummy'].astype(str).str.replace(r'[^d.+-]+', '')

请参阅regex演示。

pandas方法是Series.str.replace,用于查找匹配项并将其替换为另一个字符串(空字符串,因为您正在删除匹配项(。

您需要的模式是[^d.+-]+,这是一个取反的字符类,它匹配除数字.+-之外的任何字符、1次或多次出现。请注意-的位置,它必须位于要被视为文字-符号的字符类的开始或结束处,否则它将创建一个范围。

我不确定是否能理解你的问题,但这给了我你要求的示例输出:

import re
reg_exp = re.compile("([0-9+-.,]+)")
string = 'gg-21.534wgtr..eu678+ithn'
res = reg_exp.findall(string)
print(''.join(res))

您可以通过python re 实现这一点

说明:

d+(任意数字(

|(或(

.+(任意长度的任意.(

|(或(

+(任意单个+>>添加一个+,使其成为任意长度的++(

|(或(

-(任意单个->>为任意长度的--添加一个+(

import pandas as pd
import re
pattern = r'd+|.+|+|-'
df = pd.DataFrame()
df['dummy'] = [''.join(re.findall(pattern, 'gg-21.534wgtr..eu678+ithn'))]
print(df)
dummy
0  21.534..678+

我不是正则表达式大师,但我的第一个解决方案是

[^\d+-\.]

最新更新