Python 使用正则表达式模式替换后跟子字符串的数字或后跟空格的数字,然后再替换子字符串
对于pandas数据帧中的列,我希望删除紧跟在“gb”或“mb”之后的任何数字,或者删除中间有空格的所有数字。即删除字符串,如“500GB”和“500mb” 下面的函数仅适用于第0行和第2行,不确定如何添加图案的空间要求:Python 使用正则表达式模式替换后跟子字符串的数字或后跟空格的数字,然后再替换子字符串,python,regex,pandas,regexp-replace,Python,Regex,Pandas,Regexp Replace,对于pandas数据帧中的列,我希望删除紧跟在“gb”或“mb”之后的任何数字,或者删除中间有空格的所有数字。即删除字符串,如“500GB”和“500mb” 下面的函数仅适用于第0行和第2行,不确定如何添加图案的空间要求: pat = '(^|\s)\d+(gb|mb)($|\s)' df['Column_To_Fix'].str.lower().replace(pat, ' ', regex=True) 期望输出: Column_To_Fix 0 coolblue 1 con
pat = '(^|\s)\d+(gb|mb)($|\s)'
df['Column_To_Fix'].str.lower().replace(pat, ' ', regex=True)
期望输出:
Column_To_Fix
0 coolblue
1 connector for thing
2 for user
3 load
4 1000 add-on
5
试试这个模式
pat = '\d+ *(gb|mb)'
df['Column_To_Fix'].str.lower().str.replace(pat, ' ')
Out[462]:
0 coolblue
1 connector for thing
2 for user
3 load
4 1000 add-on
5
Name: Column_To_Fix, dtype: object
如果您喜欢系列,请更换
df['Column_To_Fix'].str.lower().replace(pat, ' ', regex=True)
我假设文本是(没有行号):
期望的结果(保持适当的对齐和间距)是:
最后一行有一个空字符串。这可以通过用空字符串替换以下正则表达式的匹配项来实现(使用re.sub
)
您更喜欢使用“”而不是'\s'。我只是想知道他们两人在任何情况下的行为是否会有所不同。还有一个小建议。使用'(^ |\s)\d+\s*(gb | mb)
这可能会避免连接器中出现额外的空间
文本第一列的数字是'0'
到'5'
?如果不是,我建议你把它们拿走。
df['Column_To_Fix'].str.lower().replace(pat, ' ', regex=True)
coolblue 100gb
connector 500 mb for thing
5gb for user
load 800 mb
1000 add-on
20 gb
coolblue
connector for thing
for user
load
1000 add-on
r'(?:^\d+ ?[gm]b | \d+ ?[gm]b(?= |$))'