@edzech问,如何才能将一根绳子分开,并将分隔符保存在其中。他的问题是标记为复本,而这里的方法与“重复”不同。
我们希望拆分一个字符串,但是通过在其中保留分隔符,我们不希望分隔它们。简而言之,对于<abc>d<e><f>ghi<j>,我们希望:
['<abc>', 'd', '<e>', '<f>', 'ghi', '<j>']而不是:
['<', 'abc', '>' 'd', '<', 'e', '>', '<', 'f', '>', 'ghi', '<', 'j', '>']使用split没有帮助,因为它将根据分隔符进行拆分。我们想把它与它的内容联系起来。
发布于 2019-04-27 00:59:02
我相信你可以在这个正则表达式中使用拆分
(?<=>)(?=[a-z<])|(?<=[a-z>])(?=<)https://regex101.com/r/WNy5n9/1
它不过是两个选项的配对查找/提前断言。
扩容
(?<= > ) # Behind a >
(?= [a-z<] ) # Ahead either a-z or <
| # or,
(?<= [a-z>] ) # Behind either a-z or >
(?= < ) # Ahead a <更新
请注意,在版本3.7分裂之前的Python版本中
在一个空的匹配没有被正确地处理。
想必他们无法分辨出空的
字符串和/或如何在零宽度匹配上完成凸点。
好像他们把头从a**中拉出来,现在是3.7版,
所以给你..。
Demo
3.7.3版
>>> import sys
>>> print( sys.version )
3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]代码
>>> import re
>>> rx = re.compile( r"(?<=>)(?=[a-z<])|(?<=[a-z>])(?=<)" )
>>> s = "<abc>d<e><f>ghi<j>test><g>"
>>> x = re.split( rx, s )
>>> print ( x )
['<abc>', 'd', '<e>', '<f>', 'ghi', '<j>', 'test>', '<g>']https://stackoverflow.com/questions/55876007
复制相似问题