获取与regex不匹配的内容的列表?

2024-04-19 19:49:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用“Python strings split with multiple separators”拆分字符串:

import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r'\w+', DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

我想单独列出匹配词之间的内容:

[", ", " - ", " ", " ", " ", " ", "!?"]

我该怎么做?你知道吗


Tags: 字符串importreyoudataherewithmultiple
3条回答

re.拆分

import re
DATA = "Hey, you - what are you doing here!?"
print re.split(r'\w+', DATA)
#prints ['', ', ', ' - ', ' ', ' ', ' ', ' ', '!?']

您可能还希望过滤掉空字符串,以完全匹配您所要求的内容。你知道吗

print re.findall(r'\W+', DATA)  # note, UPPER-case "W"

生成您要查找的列表:

[', ', ' - ', ' ', ' ', ' ', ' ', '!?']

我使用了\W+而不是\w+,它否定了您使用的字符类。你知道吗

   \w  Matches word characters, i.e., letters, digits, and underscores.
   \W  Matches non-word characters, i.e., the negated version of \w

这个Regular Expression Reference Sheet可能有助于为正则表达式搜索/匹配选择最佳字符类/元字符。另外,请参阅tutorial了解更多信息(特别是页面底部的参考部分)

如何使用补充正则表达式来\w\W?此外,与其得到一个单独的列表,一次得到所有列表可能更有效。(当然,这取决于你打算用它做什么。)

>>> re.findall(r'(\w+)(\W+)', DATA)
[('Hey', ', '), ('you', ' - '), ('what', ' '), ('are', ' '), ('you', ' '), ('doing', ' '), ('here', '!?')]

如果您真的想要单独的列表,只需压缩它:

>>> zip(*re.findall(r'(\w+)(\W+)', DATA))
[('Hey', 'you', 'what', 'are', 'you', 'doing', 'here'), (', ', ' - ', ' ', ' ', ' ', ' ', '!?')]

相关问题 更多 >