Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 使用re.split拆分字符串时的其他空元素_Python_Regex_Python 2.6 - Fatal编程技术网

Python 使用re.split拆分字符串时的其他空元素

Python 使用re.split拆分字符串时的其他空元素,python,regex,python-2.6,Python,Regex,Python 2.6,我正在尝试使用re.split在Python中拆分如下所示的字符串: #NAME="Foo" NAME2="foobar" NAME3="BAR BAR" comp = "NAME=\"Foo\" NAME2=\"FOO BAR\" NAME3=\"BAR BAR\"" 这就是我的拆分函数(包括正则表达式)的外观: re.split('(\s\w+\=\".*?\")', comp) 结果如下所示: ['NAME="Foo"', 'NAME2="foobar"', '', 'NAME3="B

我正在尝试使用re.split在Python中拆分如下所示的字符串:

#NAME="Foo" NAME2="foobar" NAME3="BAR BAR"
comp = "NAME=\"Foo\" NAME2=\"FOO BAR\" NAME3=\"BAR BAR\""
这就是我的拆分函数(包括正则表达式)的外观:

re.split('(\s\w+\=\".*?\")', comp)
结果如下所示:

['NAME="Foo"', 'NAME2="foobar"', '', 'NAME3="BAR BAR"', '']

虽然这是正确的,但我想去掉所有的空元素。

这就是您想要的:

In [10]: re.findall(r'\w+=".*?"', comp)
Out[10]: ['NAME="Foo"', 'NAME2="FOO BAR"', 'NAME3="BAR BAR"']
?


听起来不像是
re.split()

l = [x for x in re.split('(\s\w+\=\".*?\")', comp) if x != '']
结果与您期望的结果类似:

print l
['NAME="Foo"', ' NAME2="FOO BAR"', ' NAME3="BAR BAR"']

=
不需要转义,regexp中的引号也不需要转义。我无法在Python 2.7中重现您的结果。相反,结果是:
['NAME=“Foo”'、'NAME2=“Foo-BAR”、''、'NAME3=“BAR”、'']
。请注意
NAME2
前面的额外空格,没有前导空值。我看到了与Martijn python 2.7.1类似的结果,空值是两个拆分之间的内容。使用先行断言在空格上拆分,或者使用
findall()
替换。我在电脑上测试它的字符串有一个前导空格。这就是为什么我有一个前导空值。修正了问题中的问题。我会这么说;拆分是从错误的方向处理问题。这是否导致o(n)时间复杂度?如果x!=“”,您可以替换