【问题标题】:How to add a space between alphanumeric and non alphanumeric characters?如何在字母数字和非字母数字字符之间添加空格?
【发布时间】:2018-01-21 19:46:34
【问题描述】:

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

例如,如果我有一个

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

输出应该是这样的

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

【问题讨论】:

  • 你自己有没有尝试过?
  • 我尝试使用这个 re.sub(r'(\W)(\w)', r'\1 \2', string) 但问题是它在所有单词之间添加了空格并且它不满足这两个规则。
  • 是否可以选择安装另一个库?
  • 很遗憾没有
  • 用更简单的解决方案更新了我的答案。

标签: regex python-3.x


【解决方案1】:

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

^(\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 .

【讨论】:

  • 如何在同一代码中的两个非字母数字字符之间添加空格。例如,要获得像 John 与 3managers 会面的输出! % 紧张 : ( t^ria7 # manager's ." 这里 : 和 ( 之间有空格,. 和 " 之间有空格
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2012-06-23
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多