如果一个单词包含字母数字字符且第一个或多个字符是(或者是)非字母数字,那么如何将每个这样的前导非字母数字字符拆分为单独的单词;无论是否应用了第一条规则,如果单词包含字母数字字符且最后一个或多个字符是(或者是)非字母数字,那么如何将每个这样的尾随的非字母数字字符拆分为单独的单词?
例如,如果我有
string = "John had a meeting with 3managers! %nervous:( t^ria7 #manager's.!"
输出应该如下所示
"John had a meeting with 3managers ! % nervous : ( t^ria7 # managers's . !"
答案 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 .