Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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/9/opencv/3.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 split()而不删除分隔符_Python_Split_Delimiter - Fatal编程技术网

Python split()而不删除分隔符

Python split()而不删除分隔符,python,split,delimiter,Python,Split,Delimiter,这段代码几乎满足了我的需要 for line in all_lines: s = line.split('>') 除此之外,它将删除所有“>”分隔符 所以 变成 ['<html','<head'] 只需将其拆分,然后为数组/列表中的每个元素(除最后一个元素外)添加一个尾随“>”。这样如何: import re s = '<html><head>' re.findall('[^>]+>', s) 重新导入 s=“” 关于fin

这段代码几乎满足了我的需要

for line in all_lines:
    s = line.split('>')
除此之外,它将删除所有“>”分隔符

所以


变成

['<html','<head']

只需将其拆分,然后为数组/列表中的每个元素(除最后一个元素外)添加一个尾随“>”。

这样如何:

import re
s = '<html><head>'
re.findall('[^>]+>', s)
重新导入
s=“”
关于findall(“[^>]+>”,s)

如果您使用拆分解析HTML,则很可能是错误的,除非您正在编写一个针对固定安全内容文件的一次性脚本。如果该脚本适用于任何HTML输入,您将如何处理类似

不管怎样,以下几点对我很有用:

>>> import re
>>> re.split('(<[^>]*>)', '<body><table><tr><td>')[1::2]
['<body>', '<table>', '<tr>', '<td>']
>>重新导入
>>>关于拆分(“(]*>)”,“[1::2]
['', '', '', '']

这并不能真正回答您的问题,但如果您试图用Python解析HTML,我强烈建议您这样做。另请参阅。应该重新打开此问题。重复的一个是特定于正则表达式的。@restisf同样,“重复”的一个回答了一个不同的问题<代码>['','']不同于
['','',']
。我知道已经几个月了,但我刚刚投票决定重新开业。如果你也这样做了,其他人会让你越过终点线?re.split(r“(?(!$)”),直接给出答案。通过这种方式,可以通过使用正则表达式look aroundst来处理它,它可以完美地工作。。。但我不完全理解发生了什么。@some1它基本上迭代分割的结果,并将分隔符添加回。“s是一个列表,其中该列表中的每个元素都是e+d,其中e是line.split(d)结果中的元素,但仅当e不为空时”这会向结果列表的所有元素添加一个分隔符,包括没有分隔符的单个元素列表。。。如果您只想将分隔符附加到拆分元素的第一个元素,该怎么办?非常旧的post,但用于记录:
如果e
足够,
=“
可以省略。这太草率了。如果字符串是“A.B.”或“.A.B.”,并在“?”上拆分,那么“>”的情况将变成“>”Paulm No,因为在“<代码> >正文”中分割两个<代码> <代码> s。“如果您不确定所讨论的字符串是否将以所讨论的除沫器结尾,您可以这样做:
re.split((.*\n?),“my\nstr\ning”)[1::2]
d = ">"
for line in all_lines:
    s =  [e+d for e in line.split(d) if e]
import re
s = '<html><head>'
re.findall('[^>]+>', s)
>>> import re
>>> re.split('(<[^>]*>)', '<body><table><tr><td>')[1::2]
['<body>', '<table>', '<tr>', '<td>']