Python Regex将字符映射到该字符的函数

Python Regex将字符映射到该字符的函数,python,regex,Python,Regex,我想要一个使用正则表达式的函数,它可以将某些标点字符(这些:,,,(,),;,:)映射到该字符的函数。具体来说,它将在两侧放置一个空间 例如,它会将字符串“Hello,这是一个测试字符串”映射为“Hello,这是一个测试字符串” 这就是我现在拥有的: import re def add_spaces_to_punctuation(input_text) text = re.sub('[.]', ' . ', input_text) text = re.sub('[,]', '

我想要一个使用正则表达式的函数,它可以将某些标点字符(这些:
)映射到该字符的函数。具体来说,它将在两侧放置一个空间

例如,它会将字符串“Hello,这是一个测试字符串”映射为“Hello,这是一个测试字符串” 这就是我现在拥有的:

import re

def add_spaces_to_punctuation(input_text)
    text = re.sub('[.]', ' . ', input_text)
    text = re.sub('[,]', ' , ', text)
    text = re.sub('[:]', ' : ', text)
    text = re.sub('[;]', ' ; ', text)
    text = re.sub('[(]', ' ( ', text)
    text = re.sub('[)]', ' ) ', text)
    return text
这是预期的效果,但相当笨拙/难以阅读。如果我有办法将每个标点字符映射到单个正则表达式行中该字符的函数,它将显著改进。有没有办法用正则表达式实现这一点?很抱歉,如果这是显而易见的,我对regex很陌生,不知道这种东西叫什么。

试试这个:

text = re.sub(r"(\.|\,|\(|\)|\;|\:)", lambda x: f' {x.group(1)} ', text)
它使用一个捕获组来捕获角色可能是什么,然后使用lambda表达式将该角色映射到同一个角色,两侧各有一个空格(有关更多信息,请参阅)

括号中的正则表达式部分(在本例中是全部)是捕获的部分,而
x.group(1)
将为您提供捕获的字符。

尝试以下操作:

text = re.sub(r"(\.|\,|\(|\)|\;|\:)", lambda x: f' {x.group(1)} ', text)
它使用一个捕获组来捕获角色可能是什么,然后使用lambda表达式将该角色映射到同一个角色,两侧各有一个空格(有关更多信息,请参阅)


括号中的正则表达式部分(在本例中是全部)是捕获的部分,而
x.group(1)
将为您提供捕获的字符。

您可以尝试以下操作:

import re

recmp = re.compile(r'[.,:;()]')

def add_spaces_to_punctuation(input_text):
    text = recmp.sub(r' \1 ', input_text)

    return text

另外,考虑到性能,根据这一点,如果您需要经常运行它,它应该更快。

您可以尝试以下方法:

import re

recmp = re.compile(r'[.,:;()]')

def add_spaces_to_punctuation(input_text):
    text = recmp.sub(r' \1 ', input_text)

    return text
另外,考虑到性能,根据这一点,如果您需要经常运行它,它应该更快