Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在字母数字字符和非字母数字字符之间添加空格?_Regex_Python 3.x - Fatal编程技术网

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

Regex 如何在字母数字字符和非字母数字字符之间添加空格?,regex,python-3.x,Regex,Python 3.x,如果一个单词包含字母数字字符,并且第一个或多个字符是(或是)非字母数字字符,那么如何将每个前导的非字母数字字符分割为一个单独的单词;无论是否应用了第一条规则,如果单词包含字母数字字符,并且最后一个或多个字符是(或是)非字母数字字符,那么如何将每个尾随的非字母数字字符分割为单独的单词 例如,如果我有一个 string = "John had a meeting with 3managers! %nervous:( t^ria7 #manager's.!" 输出应该如下所示 "John had a

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

例如,如果我有一个

string = "John had a meeting with 3managers! %nervous:( t^ria7 #manager's.!"
输出应该如下所示

"John had a meeting with 3managers ! % nervous : ( t^ria7 # managers's . !"
(新的)想法是用空格分割单词,然后对每个单词应用另一个正则表达式。最后,零件又粘在了一起。
有问题的表述是:

^(\W+)|(\W+)$
字符串开头或结尾的非单词字符,请参阅。
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 .


您自己试过什么吗?我试过使用这个re.sub(r'(\W)(\W'),r'\1\2',字符串)但问题是,它在所有单词之间添加了空格,并且不能同时满足这两个规则。安装另一个库是一个选项吗?不幸的是,我没有用更简单的解决方案更新我的答案。如何在同一代码中的两个非字母数字字符之间添加空格。例如,要获得输出,就像John与3名经理开会一样!%紧张的:(t^ria7#manager's.“这里有一个空格在:和之间(和空格在.和之间)”