我有一个文字:
" Alice, Bob Charlie "
我想得到一对单词(如果有的话)和后面的空格。那就是:
[("", " "), ("Alice,", " "), ("Bob", " "), ("Charlie", " ")]`
在Python中,我尝试过:
re.findall(r"(\S*)(\s*)", " Alice, Bob Charlie ")
几乎可以工作 - 它最后只添加一对空("", "")
。如何摆脱它? .pop()除外?另外,我真的不明白它为什么会存在 - 在它与Charlie的空白相匹配后它应该完成,不是吗?
编辑:澄清 - 我想要第一对,即没有带有空格的单词。最后一个 - 没有字,没有空格 - 是我想摆脱的那个。没有.pop(),可能......
答案 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)