使用正则表达式模式替换数字后跟子字符串或数字后跟 space 然后子字符串

Use regex pattern to replace numbers followed by a substring or numbers followed by a space and then substring

对于 pandas 数据框中的列,我想删除紧跟 "gb" 或 "mb" 或中间有 space 的任何数字,完整地。 IE。删除诸如“500 gb”和“500mb”之类的字符串。

    Column_To_Fix
0   coolblue 100gb
1   connector 500 mb for thing
2   5gb for user
3   load 800 mb
4   1000 add-on
5   20 gb 

以下函数仅适用于第 0 行和第 2 行,不确定如何添加模式的 space 要求:

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

如果你喜欢series.replace

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

在最后一行有一个空字符串。这可以通过将以下正则表达式的匹配项替换为空字符串(使用 re.sub)来实现。

r'(?:^\d+ ?[gm]b | \d+ ?[gm]b(?= |$))'

Demo