所以这是我的问题:
我需要将这些标点项目'],[,?,!,(,),“,;,{,},与他们用空格接触的任何字符分开。例如,
"Did he eat it (the bug)?" becomes: " Did he eat it ( the bug ) ? "
我可以做类似的事情:
re.search(r'[]?!()";{}', mytext)
但是当搜索找到匹配项时,如何引用匹配的项目,以便我可以将其替换为自身和空格?在伪代码中:
replace(matched_punc, matched_punc + " ")
如果它是单词决赛,那么空间可能会出现,但是我可以稍后再说出来。大多数情况下,我只需要弄清楚如何用自己和空间替换一些东西。
非常感谢。
答案 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 ) ?