正则表达式匹配单词和尾随空格对

时间:2011-11-09 10:19:25

标签: python regex whitespace

我有一个文字:

"    Alice, Bob    Charlie  "

我想得到一对单词(如果有的话)和后面的空格。那就是:

[("", "    "), ("Alice,", " "), ("Bob", "    "), ("Charlie", "  ")]`

在Python中,我尝试过:

re.findall(r"(\S*)(\s*)", "    Alice, Bob    Charlie  ")

几乎可以工作 - 它最后只添加一对空("", "")。如何摆脱它? .pop()除外?另外,我真的不明白它为什么会存在 - 在它与Charlie的空白相匹配后它应该完成,不是吗?

编辑:澄清 - 我想要第一对,即没有带有空格的单词。最后一个 - 没有字,没有空格 - 是我想摆脱的那个。没有.pop(),可能......

3 个答案:

答案 0 :(得分:2)

re.findall(r"(\S+)(\s*)", "    Alice, Bob    Charlie  ")
+返回您可能需要的内容后,

带有\S符号:

[('Alice,', ' '), ('Bob', '    '), ('Charlie', '  ')]

否则\S*\s*可能在末尾匹配空字符串:零或多,零或多也可以等于零长度。

其他可能性(.pop()除外)将是:

[a for a in re.findall(r"(\S*)(\s*)", "    Alice, Bob    Charlie  ") if a != ('','')]

或:

re.findall(r"(\S*)(\s*)", "    Alice, Bob    Charlie  ")[:-1]

两者都完全返回你需要的东西(包括开头的空格):

[('', '    '), ('Alice,', ' '), ('Bob', '    '), ('Charlie', '  ')]

答案 1 :(得分:2)

尝试将\s*更改为\s+以至少需要1个字符的空格:

>>> re.findall(r"(\S*)(\s+)", "    Alice, Bob    Charlie  ")
[('', '    '), ('Alice,', ' '), ('Bob', '    '), ('Charlie', '  ')]

答案 2 :(得分:2)

我认为这样做

re.findall('(\S+|^)(\s*)', s)