簡體   English   中英

如何僅刪除出現在數字之后和帶有 RegEx 的字母之前的空格?

[英]How to remove only the spaces that occur after a digit, and before a letter with RegEx?

我有一個 pandas 列,如下所示,有不同語言的日期和時間。 我想將此列標准化為累計小時數。 不幸的是有空格,在我可以做任何進一步處理之前,我想只刪除出現在數字之后和字母之前的空格。 因此,在日期和小時之間或小時和分鍾指示器之間保持空間。

如果這個問題解決了,那么我要做的下一個方法是用剩余空間拆分列,並應用自定義映射器來處理數據的 rest。

如何僅刪除數字之后和字母之前出現的空格?

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',
 '9\xa0j 20\xa0h',
 '6\xa0j 20\xa0h',
 '9\xa0j 22\xa0h',
 '1\xa0j 19\xa0h',
 '1\xa0j 19\xa0h',
 '1\xa0j 18\xa0h',
 '1\xa0j 19\xa0h',
 '1\xa0j 19\xa0h',
 '1\xa0j 19\xa0h',
 '9\xa0j 22\xa0h',
 '9\xa0j 22\xa0h',
 '2\xa0h 8\xa0min',
 '2\xa0h 6\xa0min',
 '2\xa0h 9\xa0min',
 '5\xa0j 23\xa0h',
 '4\xa0j 20\xa0h',
 '4\xa0j 22\xa0h',
 '6\xa0j 20\xa0h',
 '2\xa0h 5\xa0min',
 '4\xa0j 19\xa0h',
 '5\xa0j 23\xa0h',
 '6\xa0j 11\xa0h',
 '3\xa0j 9\xa0h',
 '5\xa0j 16\xa0h',
 '5\xa0j 18\xa0h',
 '21\xa0h 8\xa0min',
 '1\xa0j 20\xa0h',
 '4\xa0j 21\xa0h',
 '3\xa0j 18\xa0h',
 '2\xa0j 17\xa0h',
 '9\xa0j 15\xa0h',
 '5\xa0j 20\xa0h',
 '2\xa0j 19\xa0h',
 '20\xa0h 31\xa0min',
 '5\xa0j 20\xa0h',
 '5\xa0j 19\xa0h',
 '6\xa0j 15\xa0h',
 '5\xa0j 23\xa0h',
 '4\xa0j 17\xa0h',
 '21\xa0h 8\xa0min',
 '4\xa0j 18\xa0h',
 '5\xa0j 20\xa0h',
 '5\xa0j 19\xa0h',
 '6\xa0j 22\xa0h',
 '4\xa0j 19\xa0h',
 '15\xa0h 44\xa0min',
 '9\xa0h 58\xa0min',
 '6\xa0j 22\xa0h',
 '21\xa0h 8\xa0min',
 '7\xa0j 14\xa0h',
 '6\xa0j',
 '5\xa0j 20\xa0h',
 '6\xa0j 17\xa0h',
 '6\xa0j 11\xa0h',
 '9\xa0j 23\xa0h',
 '2\xa0j 17\xa0h',
 '6\xa0j 11\xa0h',
 '5\xa0j 16\xa0h',
 '6\xa0j 20\xa0h',
 '6\xa0j 20\xa0h',
 '6\xa0j 20\xa0h',
 '6\xa0j 20\xa0h',
 '2\xa0j 8\xa0h',
 '6\xa0j 16\xa0h',
 '4\xa0j 12\xa0h',
 '6\xa0j 14\xa0h',
 '2\xa0j 20\xa0h',
 '3\xa0j 17\xa0h',
 '5\xa0j 20\xa0h',
 '7\xa0j 3\xa0h',
 '5\xa0j 18\xa0h',
 '1\xa0j 20\xa0h',
 '6\xa0j 4\xa0h',
 '1\xa0j 1\xa0h',
 '6\xa0j 21\xa0h',
 '6\xa0j 20\xa0h',
 '6\xa0j 19\xa0h',
 '1\xa0j 19\xa0h',
 '1\xa0j 14\xa0h',
 '5\xa0j 2\xa0h',
 '5\xa0j 16\xa0h',
 '9\xa0j 15\xa0h',
 '8\xa0j 23\xa0h',
 '1\xa0j 21\xa0h',
 '6\xa0j 4\xa0h',
 '1\xa0j 16\xa0h',
 '6\xa0j 18\xa0h',
 '18\xa0h 6\xa0min',
 '17\xa0h 38\xa0min',
 '5\xa0j 10\xa0h',
 '9\xa0h 52\xa0min',
 '6\xa0j 14\xa0h',
 '6\xa0j 14\xa0h',
 '6\xa0j 14\xa0h',
 '6\xa0j 14\xa0h',
 '6\xa0j 14\xa0h',
 '6\xa0j 14\xa0h',
 '6\xa0j 1\xa0h',
 '5\xa0j 17\xa0h',
 '3\xa0j 17\xa0h',
 '1\xa0j 19\xa0h',
 '4\xa0j 22\xa0h',
 '3\xa0j',
 '1\xa0j 17\xa0h',
 '1\xa0j 10\xa0h',
 '4\xa0j 19\xa0h',
 '6\xa0j 7\xa0h',
 '8\xa0j 10\xa0h',
 '2\xa0j 19\xa0h',
 '9\xa0j 18\xa0h',
 '18\xa0h 23\xa0min',
 '5\xa0j 20\xa0h',
 '2\xa0j 16\xa0h',
 '18\xa0h 46\xa0min',
 '1\xa0j 19\xa0h',
 '3\xa0j 2\xa0h',
 '9\xa0j 20\xa0h',
 '9\xa0j 20\xa0h',
 '9\xa0j 20\xa0h',
 '6\xa0j 21\xa0h',
 '3\xa0j 17\xa0h',
 '3\xa0j 17\xa0h',
 '3\xa0j 17\xa0h',
 '2\xa0j 11\xa0h',
 '6\xa0j 1\xa0h',
 '6\xa0j 1\xa0h',
 '5\xa0j 19\xa0h',
 '5\xa0j 20\xa0h',
 '5\xa0j 20\xa0h',
 '4\xa0j 18\xa0h',
 '5\xa0j 20\xa0h',
 '5\xa0j 15\xa0h',
 '5\xa0j 20\xa0h',
 '9\xa0j 18\xa0h',
 '7\xa0j 17\xa0h',
 '6\xa0j 20\xa0h',
 '5\xa0j 10\xa0h',
 '14\xa0h 43\xa0min',
 '6\xa0j 5\xa0h',
 '5\xa0j 19\xa0h',
 '9\xa0j 18\xa0h',
 '1\xa0j 18\xa0h',
 '1\xa0j 18\xa0h',
 '6\xa0j 1\xa0h',
 '6\xa0j 22\xa0h',
 '3\xa0j 10\xa0h',
 '7\xa0j 20\xa0h',
 '3\xa0j 10\xa0h',
 '6\xa0j 19\xa0h',
 '1\xa0j 14\xa0h',
 '6\xa0j 18\xa0h',
 '1\xa0j 12\xa0h',
 '5\xa0j 1\xa0h',
 '2\xa0h 7\xa0min',
 '2\xa0h 7\xa0min',
 '20\xa0h 5\xa0min',
 '5\xa0j 20\xa0h',
 '9\xa0j 7\xa0h',
 '5\xa0j 19\xa0h',
 '15\xa0h 14\xa0min',
 '2\xa0h 5\xa0min',
 '2\xa0h 6\xa0min',
 '2\xa0h 6\xa0min',
 '2\xa0h 7\xa0min',
 '2\xa0h 5\xa0min',
 '8\xa0j 18\xa0h',
 '4\xa0j 10\xa0h',
 '5\xa0j 20\xa0h',
 '2\xa0j 19\xa0h',
 '1\xa0j 20\xa0h',
 '1\xa0j 14\xa0h',
 '6\xa0j 17\xa0h',
 '1\xa0j 22\xa0h',
 '1\xa0j 19\xa0h',
 '1\xa0j 12\xa0h',
 '6\xa0j 10\xa0h',
 '21\xa0h 8\xa0min',
 '5\xa0j 21\xa0h',
 '2\xa0h 10\xa0min',
 '1\xa0j 20\xa0h',
 '5\xa0j 20\xa0h',
 '3\xa0j 22\xa0h',
 '15\xa0h 12\xa0min',
 '6\xa0j 14\xa0h',
 '5\xa0j 20\xa0h',
 '1\xa0j 3\xa0h',
 '5\xa0j 21\xa0h',
 '6\xa0j 21\xa0h',
 '5\xa0j 19\xa0h',
 '6\xa0j 20\xa0h',
 '6\xa0j 19\xa0h',
 '6\xa0j 19\xa0h',
 '7\xa0j 3\xa0h',
 '4\xa0j 18\xa0h',
 '2\xa0j 20\xa0h',
 '5\xa0j 17\xa0h',
 '8\xa0j 18\xa0h',
 '5\xa0j 16\xa0h',
 '5\xa0j 16\xa0h',
 '4\xa0j 17\xa0h',
 '2\xa0j 18\xa0h',
 '16\xa0h 39\xa0min']
DATAFRAME=pd.DataFrame({'TIME':L})

我嘗試了很多 RegEx 表達式,但都刪除了中間空格或期望有一定數量的空格。

期望的結果:

'4 d 19 h'       --> '4d 19h'
'6g 23h'         --> '6g 23h'
'20Std 50 Min'   --> '20Std 50Min'
'1\xa0j 18\xa0h' --> '1j 18h',
import re

re.sub(r'(?<=[0-9])[ \u00A0](?=[a-zA-Z])', '', '4 d 19 h')

使用示例進行編輯,可以根據需要從此處添加額外的 unicode 個字符,如上例https://jkorpela.fi/chars/spaces.html

有關正則表達式細節的詳細信息,請參閱https://www.regular-expressions.info/lookaround.html

如果數字和字符之間只能有一個空格,我會使用以下正則表達式: (\d+)[\s|\xa0](\w)

所以,在你的代碼中它會是這樣的:

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

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM