Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配单词和尾随空格对_Python_Regex_Whitespace - Fatal编程技术网

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+$)
:一个或多个空格字符或字符串的结尾。但原始正则表达式适用于问题中给出的示例。