Python 正则表达式匹配单词和尾随空格对
我有一段文字:Python 正则表达式匹配单词和尾随空格对,python,regex,whitespace,Python,Regex,Whitespace,我有一段文字: " Alice, Bob Charlie " 我想得到成对的单词(如果有的话)和后面的空格。即: [("", " "), ("Alice,", " "), ("Bob", " "), ("Charlie", " ")]` 在Python中,我尝试: re.findall(r"(\S*)(\s*)", " Alice, Bob Charlie ") 它几乎可以工作-它只是在末尾添加一个空对(“”,“”)。如何摆脱它?除了.pop()?
" Alice, Bob Charlie "
我想得到成对的单词(如果有的话)和后面的空格。即:
[("", " "), ("Alice,", " "), ("Bob", " "), ("Charlie", " ")]`
在Python中,我尝试:
re.findall(r"(\S*)(\s*)", " Alice, Bob Charlie ")
它几乎可以工作-它只是在末尾添加一个空对(“”,“”)
。如何摆脱它?除了.pop()?而且,我真的不明白为什么它会出现在那里——在它与Charlie的空格匹配之后,它应该会结束,不是吗
编辑:澄清-我想要第一对,即没有带空格的单词。最后一个-没有单词,没有空格-是我想摆脱的。如果没有.pop(),则可能
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 != ('','')]
或:
这两个选项都会返回您所需的内容(包括开头的空格):
在\S
后面加上+
符号,返回您可能想要的内容:
[('Alice,', ' '), ('Bob', ' '), ('Charlie', ' ')]
否则,\S*\S*
可能会在末尾匹配空字符串:零或更多,零或更多也可以等于零长度
其他可能性(除了.pop()
)是:
[a for a in re.findall(r"(\S*)(\s*)", " Alice, Bob Charlie ") if a != ('','')]
或:
这两个选项都会返回您所需的内容(包括开头的空格):
尝试将
\s*
更改为\s+
以要求至少1个字符的空白:
>>> re.findall(r"(\S*)(\s+)", " Alice, Bob Charlie ")
[('', ' '), ('Alice,', ' '), ('Bob', ' '), ('Charlie', ' ')]
尝试将
\s*
更改为\s+
以要求至少1个字符的空白:
>>> re.findall(r"(\S*)(\s+)", " Alice, Bob Charlie ")
[('', ' '), ('Alice,', ' '), ('Bob', ' '), ('Charlie', ' ')]
我想这样就可以了
re.findall('(\S+|^)(\s*)', s)
我想这样就可以了
re.findall('(\S+|^)(\s*)', s)
*
表示匹配零或更多,因此它匹配一个空字符串。仅仅因为你有两次,并不意味着它们都不匹配空字符串。*
意味着匹配零或更多,所以它匹配一个空字符串。仅仅因为你有两次,并不意味着它们都不匹配空字符串。不,不匹配。他也想要开头的空白。不,不是。他希望在开头也有空白。如果他希望匹配一个没有尾随空白的名称,该怎么办?如果文本是“Alice,Bob Charlie”-Charlie不匹配。然后将第二组更改为(\s+$)
:一个或多个空白字符或字符串的结尾。但原始正则表达式适用于问题中给出的示例。如果他想匹配一个没有尾随空格的名称,该怎么办?如果文本是“Alice,Bob Charlie”-Charlie不匹配。然后将第二组更改为(\s+$)
:一个或多个空格字符或字符串的结尾。但原始正则表达式适用于问题中给出的示例。