得到正则表达式不匹配的列表?

时间:2012-07-18 21:38:09

标签: python regex

我正在使用“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']

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:5)

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以获取更多信息(尤其是页面底部的参考部分)

答案 1 :(得分:3)

如何将补充正则表达式用于\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'), (', ', ' - ', ' ', ' ', ' ', ' ', '!?')]

答案 2 :(得分:0)

re。分割

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

您可能还想过滤掉空字符串以与您要求的内容完全匹配。