【问题标题】:python regex: how to split string into distinct groups based on alphabets, digits and punctuationpython regex:如何根据字母、数字和标点符号将字符串分成不同的组
【发布时间】:2012-05-02 20:51:22
【问题描述】:

我正在使用 python 2.7 学习正则表达式

给定一个句子(假设小写和ascii),例如:

input = 'i like: a, b, 007 and c!!'

我如何将输入字符串标记为

['i', 'like', ':', 'a', ',', 'b', ',', '007', 'and', 'c', '!!']

我可以用 C++ 编写自动机和转换矩阵,但我想用 python 来做

我无法想出一个能够一次性匹配这些不同类别的字母、数字和标点符号的正则表达式。

我看过一些 stackoverflow 帖子 herehere,但不太遵循他们的方法。

我已经尝试了一段时间,非常感谢您的帮助。

P.S:这不是作业题

【问题讨论】:

  • 我使用了 're' 模块,可以将 [az]+ 、 [0-9]+ 、 [^a-z0-9\s]+ 分别分组,但无法将它们分组进入一个产生所需输出的正则表达式

标签: python regex


【解决方案1】:
>>> from string import punctuation
>>> text = 'i like: a, b, 007 and c!!'
>>> re.findall('\w+|[{0}]+'.format(punctuation),text)
['i', 'like', ':', 'a', ',', 'b', ',', '007', 'and', 'c', '!!']

这也有效,但如果找不到字母数字字符,则会找到任何非空白字符

>>> re.findall('\w+|\S+',text)
['i', 'like', ':', 'a', ',', 'b', ',', '007', 'and', 'c', '!!']

【讨论】:

  • [{0}] 在您的第一个示例中做了什么?我无法绕过它。
  • 0th 参数替换为标点符号格式。接受标点符号中的任何字母。
  • 您的回答很优雅。一个小细节 - 我希望分别对字母、数字和标点符号进行分组,而 \w 也将 '_' 视为一个单词字符。我想在您的解决方案中用 [a-z0-9] 替换 \w 应该可以。我将您的答案标记为已接受。感谢您的回复。
  • 我从阅读问题中不知道这一点,但您可以通过添加更多类别轻松添加。
猜你喜欢
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
相关资源
最近更新 更多