Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 - Fatal编程技术网

Python 使用正则表达式进行拆分会产生不需要的空字符串

Python 使用正则表达式进行拆分会产生不需要的空字符串,python,regex,Python,Regex,在python中,我执行以下操作: >>> re.split("(hello|world|-)", 'hello-world') 我期待着: ['hello'、'-'、'world'] 然而,我得到的是: [''‘你好'、''-''、''‘世界'、''] 这个'从哪里来 我正在使用Python3,以防万一 编辑 你们中的许多人说我可以在-上拆分它,但是,如果有意义的话,我想提取标记。例如,如果我有“hellohello--worldhello”。我要它回来 ['hello

在python中,我执行以下操作:

>>> re.split("(hello|world|-)", 'hello-world')

我期待着:
['hello'、'-'、'world']

然而,我得到的是:
[''‘你好'、''-''、''‘世界'、'']

这个
'
从哪里来

我正在使用Python3,以防万一

编辑 你们中的许多人说我可以在
-
上拆分它,但是,如果有意义的话,我想提取
标记。例如,如果我有
“hellohello--worldhello”
。我要它回来


['hello'、'hello'、'-'、'-'、'world'、'hello']

根据文档:

如果分隔符中有捕获组,并且它在字符串开头匹配,则结果将以空字符串开头。对于字符串的结尾也适用相同的情况:

如果这是您的问题,您可以始终使用
过滤器
来控制列表

>>> filter(None, re.split('(hello|world|-)', 'hellohello---worldhello'))
['hello', 'hello', '-', '-', '-', 'world', 'hello']
或者使用
findall
获取匹配项

>>> re.findall('(hello|world|-)', 'hellohello---worldhello')
['hello', 'hello', '-', '-', '-', 'world', 'hello']

额外的输出元素是因为您要求re拆分例如hello上的字符串,因此它试图告诉您hello之前是什么,hello和“-”之间是什么,等等。所有这些都是空字符串

如果将其更改为:

re.split((-),“hello world”)

你会得到想要的结果


['hello'、'-'、'world']

您为什么不为此使用
str.partition
<代码>'hello-world'。分区('-')
:-->
('hello','-','world')
我可以这样做,但如果我有
hello-world
。我希望它返回
['hello'、'-'、'-'、'world']
除非标记始终是“hello”“-”和“world”,否则我看不出有可能实现您的目标。否则,正则表达式引擎如何知道“hellohello”包含两个感兴趣的项?为什么它不知道?我试过了。看看这个屏幕截图。它显示它匹配所有令牌。我可以这样做,但它只适用于这种情况。看看我编辑的答案。Idk谁先回答,@isedev或你。我想是你,所以我把你的答案记下来。谢谢你!