【问题标题】:How do You Split String into Words and Special Characters in Python?如何在 Python 中将字符串拆分为单词和特殊字符?
【发布时间】:2014-10-27 13:09:52
【问题描述】:

我想将字符串拆分为单词 [a-zA-Z] 和它可能包含的任何特殊字符,@# 符号除外

message = "I am to be @split, into #words, And any other thing that is not word, mostly special character(.,>)"

预期结果:

['I', 'am', 'to', 'be', '@split', ',', 'into', '#words', ',', 'And', 'any', 'other', 'thing', 'that', 'is', 'not', 'word', ',', 'mostly', 'special', 'character', '(', '.', ',', '>', ')']

如何在 Python 中实现这一点?

【问题讨论】:

  • 那么,“单词”和“特殊字符”到底是怎么定义的呢?
  • @JoelCornett:我的意思是 ASCII 特殊字符,en.wikipedia.org/wiki/Special_characters
  • 不应该 '#words,''#word',','
  • @JoelCornett:你知道异常吗?你不明白我的问题吗?
  • @Yax:对不起。我在打电话,没有看到你问题中的第一句话。

标签: python regex string


【解决方案1】:

怎么样:

re.findall(r"[A-Za-z@#]+|\S", message)

该模式匹配任何单词字符序列(此处定义为字母加上@#),或任何单个非空白字符。

【讨论】:

  • 这样做了,但我尝试了' '.join(message),我的特殊字符与它们原来的位置隔开。
  • @Yax:嗯,是的。你问的问题说要扔掉所有的空间,所以没有办法知道以前是如何隔开的。如果你只是在结果中的每个列表项之间插入一个空格,你会得到一堆额外的东西。
  • 我没有办法解决这个问题吗?我不会为此问另一个问题。
  • @Yax:我不确定重点是什么。如果您以某种方式拆分保留空格的单词和符号,然后重新加入它们,您将得到原始字符串。
  • 听起来您不想拆分每个单词和符号,只拆分以@# 开头的那些。试试:re.sub(r"[@#]\w+", lambda m: '<a href="{0}">{0}</a>'.format(m.group()), message)。并阅读XY problem,以便您以后可以提出更好的问题!
【解决方案2】:

您可以使用字符类来指定所有您想要用于拆分的字符。 [^\w@#] -- 这意味着除了字母/数字/下划线/@/#之外的每个字符

然后您也可以在re.split 中使用捕获括号来捕获特殊字符。

filter(None, re.split(r'\s|([^\w@#])', message))

filter 用于删除空字符串以防止特殊字符之间的拆分。 \s| 部分是为了不捕获空格。

【讨论】:

  • 这也做到了,但我尝试了' '.join(message) 并且我的特殊字符与它们原来的位置隔开。
猜你喜欢
  • 2022-11-13
  • 2020-05-18
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多