如何仅删除空格,发生在一个数字之后,并与RegEx字母之前?



我有一个pandas列,如下所示,其中有不同语言的日期和小时。我想将这一栏标准化为累积小时数。不幸的是,这里有空格,在我可以做任何进一步的处理之前,我想只删除出现在数字之后和字母之前的空格。因此,保持日和小时之间或小时和分钟指示器之间的空间。

如果这个问题解决了,那么我要做的下一种方法是按剩余空间分割列,并应用自定义映射器来处理其余的数据。

如何只删除数字后面和字母前面的空格?

import pandas as pd
L=['4 d 19 h',
'6g 23h',
'6g 23h',
'6g 23h',
'6g 23h',
'5g 18h',
'5g 11h',
'4T 20Std',
'5T 18Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 23Std',
'6T 14Std',
'1T 14Std',
'4T 9Std',
'1T 22Std',
'20Std 50 Min',
'9xa0j 20xa0h',
'6xa0j 20xa0h',
'9xa0j 22xa0h',
'1xa0j 19xa0h',
'1xa0j 19xa0h',
'1xa0j 18xa0h',
'1xa0j 19xa0h',
'1xa0j 19xa0h',
'1xa0j 19xa0h',
'9xa0j 22xa0h',
'9xa0j 22xa0h',
'2xa0h 8xa0min',
'2xa0h 6xa0min',
'2xa0h 9xa0min',
'5xa0j 23xa0h',
'4xa0j 20xa0h',
'4xa0j 22xa0h',
'6xa0j 20xa0h',
'2xa0h 5xa0min',
'4xa0j 19xa0h',
'5xa0j 23xa0h',
'6xa0j 11xa0h',
'3xa0j 9xa0h',
'5xa0j 16xa0h',
'5xa0j 18xa0h',
'21xa0h 8xa0min',
'1xa0j 20xa0h',
'4xa0j 21xa0h',
'3xa0j 18xa0h',
'2xa0j 17xa0h',
'9xa0j 15xa0h',
'5xa0j 20xa0h',
'2xa0j 19xa0h',
'20xa0h 31xa0min',
'5xa0j 20xa0h',
'5xa0j 19xa0h',
'6xa0j 15xa0h',
'5xa0j 23xa0h',
'4xa0j 17xa0h',
'21xa0h 8xa0min',
'4xa0j 18xa0h',
'5xa0j 20xa0h',
'5xa0j 19xa0h',
'6xa0j 22xa0h',
'4xa0j 19xa0h',
'15xa0h 44xa0min',
'9xa0h 58xa0min',
'6xa0j 22xa0h',
'21xa0h 8xa0min',
'7xa0j 14xa0h',
'6xa0j',
'5xa0j 20xa0h',
'6xa0j 17xa0h',
'6xa0j 11xa0h',
'9xa0j 23xa0h',
'2xa0j 17xa0h',
'6xa0j 11xa0h',
'5xa0j 16xa0h',
'6xa0j 20xa0h',
'6xa0j 20xa0h',
'6xa0j 20xa0h',
'6xa0j 20xa0h',
'2xa0j 8xa0h',
'6xa0j 16xa0h',
'4xa0j 12xa0h',
'6xa0j 14xa0h',
'2xa0j 20xa0h',
'3xa0j 17xa0h',
'5xa0j 20xa0h',
'7xa0j 3xa0h',
'5xa0j 18xa0h',
'1xa0j 20xa0h',
'6xa0j 4xa0h',
'1xa0j 1xa0h',
'6xa0j 21xa0h',
'6xa0j 20xa0h',
'6xa0j 19xa0h',
'1xa0j 19xa0h',
'1xa0j 14xa0h',
'5xa0j 2xa0h',
'5xa0j 16xa0h',
'9xa0j 15xa0h',
'8xa0j 23xa0h',
'1xa0j 21xa0h',
'6xa0j 4xa0h',
'1xa0j 16xa0h',
'6xa0j 18xa0h',
'18xa0h 6xa0min',
'17xa0h 38xa0min',
'5xa0j 10xa0h',
'9xa0h 52xa0min',
'6xa0j 14xa0h',
'6xa0j 14xa0h',
'6xa0j 14xa0h',
'6xa0j 14xa0h',
'6xa0j 14xa0h',
'6xa0j 14xa0h',
'6xa0j 1xa0h',
'5xa0j 17xa0h',
'3xa0j 17xa0h',
'1xa0j 19xa0h',
'4xa0j 22xa0h',
'3xa0j',
'1xa0j 17xa0h',
'1xa0j 10xa0h',
'4xa0j 19xa0h',
'6xa0j 7xa0h',
'8xa0j 10xa0h',
'2xa0j 19xa0h',
'9xa0j 18xa0h',
'18xa0h 23xa0min',
'5xa0j 20xa0h',
'2xa0j 16xa0h',
'18xa0h 46xa0min',
'1xa0j 19xa0h',
'3xa0j 2xa0h',
'9xa0j 20xa0h',
'9xa0j 20xa0h',
'9xa0j 20xa0h',
'6xa0j 21xa0h',
'3xa0j 17xa0h',
'3xa0j 17xa0h',
'3xa0j 17xa0h',
'2xa0j 11xa0h',
'6xa0j 1xa0h',
'6xa0j 1xa0h',
'5xa0j 19xa0h',
'5xa0j 20xa0h',
'5xa0j 20xa0h',
'4xa0j 18xa0h',
'5xa0j 20xa0h',
'5xa0j 15xa0h',
'5xa0j 20xa0h',
'9xa0j 18xa0h',
'7xa0j 17xa0h',
'6xa0j 20xa0h',
'5xa0j 10xa0h',
'14xa0h 43xa0min',
'6xa0j 5xa0h',
'5xa0j 19xa0h',
'9xa0j 18xa0h',
'1xa0j 18xa0h',
'1xa0j 18xa0h',
'6xa0j 1xa0h',
'6xa0j 22xa0h',
'3xa0j 10xa0h',
'7xa0j 20xa0h',
'3xa0j 10xa0h',
'6xa0j 19xa0h',
'1xa0j 14xa0h',
'6xa0j 18xa0h',
'1xa0j 12xa0h',
'5xa0j 1xa0h',
'2xa0h 7xa0min',
'2xa0h 7xa0min',
'20xa0h 5xa0min',
'5xa0j 20xa0h',
'9xa0j 7xa0h',
'5xa0j 19xa0h',
'15xa0h 14xa0min',
'2xa0h 5xa0min',
'2xa0h 6xa0min',
'2xa0h 6xa0min',
'2xa0h 7xa0min',
'2xa0h 5xa0min',
'8xa0j 18xa0h',
'4xa0j 10xa0h',
'5xa0j 20xa0h',
'2xa0j 19xa0h',
'1xa0j 20xa0h',
'1xa0j 14xa0h',
'6xa0j 17xa0h',
'1xa0j 22xa0h',
'1xa0j 19xa0h',
'1xa0j 12xa0h',
'6xa0j 10xa0h',
'21xa0h 8xa0min',
'5xa0j 21xa0h',
'2xa0h 10xa0min',
'1xa0j 20xa0h',
'5xa0j 20xa0h',
'3xa0j 22xa0h',
'15xa0h 12xa0min',
'6xa0j 14xa0h',
'5xa0j 20xa0h',
'1xa0j 3xa0h',
'5xa0j 21xa0h',
'6xa0j 21xa0h',
'5xa0j 19xa0h',
'6xa0j 20xa0h',
'6xa0j 19xa0h',
'6xa0j 19xa0h',
'7xa0j 3xa0h',
'4xa0j 18xa0h',
'2xa0j 20xa0h',
'5xa0j 17xa0h',
'8xa0j 18xa0h',
'5xa0j 16xa0h',
'5xa0j 16xa0h',
'4xa0j 17xa0h',
'2xa0j 18xa0h',
'16xa0h 39xa0min']
DATAFRAME=pd.DataFrame({'TIME':L})

我尝试了许多RegEx表达式,但都删除了中间的空格,或者期望一定数量的空格。

期望结果:

'4 d 19 h'       --> '4d 19h'
'6g 23h'         --> '6g 23h'
'20Std 50 Min'   --> '20Std 50Min'
'1xa0j 18xa0h' --> '1j 18h',
import re
re.sub(r'(?<=[0-9])[ u00A0](?=[a-zA-Z])', '', '4 d 19 h')

用示例编辑,可以从这里添加额外的unicode字符,如上面的示例https://jkorpela.fi/chars/spaces.html

有关regexp细节的详细信息,请参阅https://www.regular-expressions.info/lookaround.html

如果数字和字符之间只能有一个空格,我会使用以下正则表达式:(d+)[s|xa0](w)

那么,在你的代码中,它应该是这样的:

DATAFRAME=pd.DataFrame({'TIME':[re.sub(r"(d+)[s|xa0](w+)", r"12", l) for l in L]})

希望有帮助。

最新更新