首页 > 解决方案 > 将字符串拆分为字母和标点符号,但正则表达式除外

问题描述

我正在尝试将字符串分成两部分:字母字符和特殊字符。我想限制转义字符的出现

b.sc.... = ['b.sc.','...'] (只保留“。”内部单词和外部单词一次)

真的????= ['really','????'] (遇到任何其他特殊字符时拆分)

在发布到这里之前,我经历了很多 SO 问题。到目前为止,我已经想出了这个:re.findall(r"[\w+|\-.+\w]+|\W+,文本)`如何进一步进行?

标签: pythonregex

解决方案


您可以使用

[re.sub(r'([.-])+', r'\1', x) for x in re.findall(r'\w+(?:-+\w+)+|\w+(?:\.+\w+)*\.?|[^\w\s]+', text)]

看到这个正则表达式演示

细节

  • \w+(?:-+\w+)+- 一个或多个单词字符后跟一个或多个出现的-和一个或多个单词字符
  • |- 或者
  • \w+(?:\.+\w+)*\.?- 一个或多个单词字符后跟一个或多个出现的.和一个或多个单词字符,然后是一个可选的点
  • |- 或者
  • [^\w\s]+- 一个或多个非单词和非空白字符。

re.sub(r'([.-])+', r'\1', x)部分是一个后处理步骤,用于将一个或多个连续字符.-字符替换为一次出现。


推荐阅读