如何在字母数字字符和非字母数字字符之间添加空格?

时间:2018-01-21 19:46:35

标签: regex python-3.x

如果一个单词包含字母数字字符且第一个或多个字符是(或者是)非字母数字,那么如何将每个这样的前导非字母数字字符拆分为单独的单词;无论是否应用了第一条规则,如果单词包含字母数字字符且最后一个或多个字符是(或者是)非字母数字,那么如何将每个这样的尾随的非字母数字字符拆分为单独的单词?

例如,如果我有

string = "John had a meeting with 3managers! %nervous:( t^ria7 #manager's.!"

输出应该如下所示

"John had a meeting with 3managers ! % nervous : ( t^ria7 # managers's . !"

1 个答案:

答案 0 :(得分:3)

(新)想法是通过空格分割单词,然后将替代正则表达式应用于每个单词。最后,零件再次粘在一起 有问题的表达方式:

^(\W+)|(\W+)$

这是字符串开头或结尾的非单词字符,请参阅a demo on regex101.com

<小时/> 在Python中,您需要检查捕获的组以插入适当的空格:

import re

string = """John had a meeting with 3managers! %nervous:( t^ria7 #manager's."""

def replacer(match):
    if match.group(1) is not None:
        return '{} '.format(match.group(1))
    else:
        return ' {}'.format(match.group(2))

rx = re.compile(r'^(\W+)|(\W+)$')

string = " ".join([rx.sub(replacer, word) for word in string.split()])
print(string)

这会产生

John had a meeting with 3managers ! % nervous :( t^ria7 # manager's .