我正在使用“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']
我希望单独列出匹配单词之间的内容:
[", ", " - ", " ", " ", " ", " ", "!?"]
我该怎么做?
答案 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 ['', ', ', ' - ', ' ', ' ', ' ', ' ', '!?']
您可能还想过滤掉空字符串以与您要求的内容完全匹配。