[英]How to split a string without removing the delimiter?
我知道这个问题过去已经得到了回答。 但是我仍然遇到困难,尽管我已经尝试应用我在网上找到的多个建议。 所以,我想要的很容易。 拆分此字符串
"__label__2:somedata"
或者
"__label__43:somedata"
并得到
['__label__2:', 'somedata']
或者
['__label__43:', 'somedata'].
这是我的代码:
import re
line = "__label__2:somedata"
p = re.split("(__label__{1,2}:)", line)
print (p)
但这不幸打印
['__label__2:somedata']
我在这里做错了什么?
您需要在正则表达式中添加 \\d+ ,如下所示:
(__label__\d+:)
这也允许您捕获所有数字,而不必列出所有可能的值......
"(__label__{1,2}:)"
没有按照你的想法去做。 {1,2}
请求__label__
字符串重复 1 或 2 __label__
,而不是字符1
或2
。
正确的语法是使用[12]
:
import re
re.split('(__label__[12]:)', "__label__2:somedata")
输出: ['', '__label__2:', 'somedata']
您似乎在拆分字符串和匹配其中的一部分之间犹豫不决。 两者都是可能的,但它们是不同的,并且具有不同的用例。
分裂:
您只需拆分:
并将分隔符添加到除最后一部分之外的所有部分:
lst = line.split(':') mx = len(lst) - 1 result = [ s if i == mx else s + ':' for i, s in enumerate(lst)]
比赛:
您必须匹配第一部分,并分别匹配该行的其余部分:
m = re.match('(__label__\\\\d{1,2}:)(.*)', line) resul = m.groups()
如果您可以期望有 2 个以上的字段,您将拆分,如果您想控制第一个的模式,您将进行匹配。
您可以使用.partition :
>>> s="__label__2:somedata"
>>> t=s.partition(':')
>>> [t[0]+t[1], t[2]]
['__label__2:', 'somedata']
如果你有一堆,你可以使用一个理解:
cases=("__label__2:somedata", "__label__43:somedata" )
>>> [[t[0]+t[1], t[2]] for t in map(lambda s: s.partition(':'), cases)]
[['__label__2:', 'somedata'], ['__label__43:', 'somedata']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.