Python 在Pandas中正则表达式匹配的开头添加一个字符

Python 在Pandas中正则表达式匹配的开头添加一个字符,python,regex,pandas,regex-group,Python,Regex,Pandas,Regex Group,我有一个数据框,它有两列,id和text df = pd.DataFrame([[1, 'Hello world 28'], [2, 'Hi how are you 9'], [3, '19 Hello']], columns=['id','text']) id text 1 Hello world 28 2 Hi how are you 9 3 19 Hello 在文本字段中,每当有一个数字前面有空格时,我想在该数字前面添加一个#。我

我有一个数据框,它有两列,
id
text

df = pd.DataFrame([[1, 'Hello world 28'], [2, 'Hi how are you 9'], [3, '19 Hello']], columns=['id','text'])

   id   text
    1   Hello world 28
    2   Hi how are you 9
    3   19 Hello
    
文本
字段中,每当有一个数字前面有空格时,我想在该数字前面添加一个
#
。我正在寻找的结果数据帧如下所示:

   id   text
    1   Hello world #28
    2   Hi how are you #9
    3   19 Hello 
我尝试了以下方法来捕获正则表达式模式,并通过以下示例在数字之前添加
#
字符:

但是,这会给出以下结果,它将整个数字替换为
#
,而不是将其添加到正则表达式匹配的开头:

   id   text
    1   Hello world #
    2   Hi how are you #
    3   19 Hello 
关于如何在正则表达式匹配之前添加
#
字符,有什么建议吗?谢谢

试试看

df['text'].replace(r"\s(\d{1,2})", r" #\1", regex=True)

i、 e.移动副词以包围数字部分,以捕获要反映在
\1
中的数字,并将替换字符串设置为原始
r
以避开
\1
中的斜杠(同时在
\code>前面加一个空格)

以防要保留原始空格,请使用两组:

df['text'].replace(r“(\s)(\d{1,2})”,r“\1#\2”,regex=True)

解释

--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
\s空格(\n、\r、\t、\f和“”)
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
(分组并捕获到\2:
--------------------------------------------------------------------------------
\d{1,2}位(0-9)(1到2次之间)
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)结束\2

注意
df['text'].replace(r“(\s)(\d{1,2})”,r“\1#\2”,regex=True)
将保留原始空白。
df['text'].replace(r"\s(\d{1,2})", r" #\1", regex=True)