如何在python中引用正则表达式匹配作为变量

时间:2013-12-03 05:09:55

标签: python regex string

所以这是我的问题:

我需要将这些标点项目'],[,?,!,(,),“,;,{,},与他们用空格接触的任何字符分开。例如,

"Did he eat it (the bug)?" becomes: " Did he eat it ( the bug ) ? "

我可以做类似的事情:

re.search(r'[]?!()";{}', mytext)

但是当搜索找到匹配项时,如何引用匹配的项目,以便我可以将其替换为自身和空格?在伪代码中:

replace(matched_punc, matched_punc + " ")

如果它是单词决赛,那么空间可能会出现,但是我可以稍后再说出来。大多数情况下,我只需要弄清楚如何用自己和空间替换一些东西。

非常感谢。

3 个答案:

答案 0 :(得分:3)

如何使用re.sub

re.sub(r'([][?!()";{}])', r' \1 ', mytext)

或者,如果您需要确保不会在一起获得多个空格,那么应该可以起作用:

re.sub(r'(?<=\S)(?=[][?!()";{}])|(?<=[][?!()";{}])(?=\S)', ' ', mytext)

注意:感谢perreal为我点击此次。

答案 1 :(得分:2)

您可以使用组来引用它,例如(使用您的代码作为示例):

match = re.search(r'[]?!()";{}', mytext)
if match:
    replace(match.group(0), match.group(0) + " ")

您可以找到更多信息here

答案 2 :(得分:2)

另一种方法是使用环视表达式来进行插入而不是替换:

print re.sub(r'(?<=[][?!()"])(?=[^ ])', ' ', 
        re.sub(r'(?<=[^ ])(?=[\[\]?!()"])', ' ', mytext)) 

打印:

Did he eat it ( the bug ) ?