我带来了
instance_name(.+)(?=instance_name)
我的测试字符串:
instance_name DEDUP
iops,other,1
instance_name USERSPACE_APPS
iops,read,158534981
iops,write,168514545
iops,other,1557566878
total_latency,read,38774076988
total_latency,write,36596756500
total_latency,other,96023066014
time
仅匹配
DEDUP
iops,other,1
据我所知,最后没有instance_name。但我想匹配instance_name之后的所有数据,直到下一个instance_name。但是对于最后一次出现,最后没有instance_name。我也想要那个。
我正在使用python。有什么建议吗?
修改
预期产出:
Match1:
DEDUP
iops,other,1
Match2:
USERSPACE_APPS
iops,read,158534981
iops,write,168514545
iops,other,1557566878
total_latency,read,38774076988
total_latency,write,36596756500
total_latency,other,96023066014
答案 0 :(得分:0)
将其更改为
instance_name(.+?)(?=instance_name|\Z)
这增加了一个替换(|
),其中\Z
表示字符串的末尾(从移动设备发布,因此有点短)。
答案 1 :(得分:0)
Jan给出的答案对我不起作用,我认为它不会再适用于添加到文本中的任何“instance_name”值,但是这样做了:
(?:(?<=instance_name\s)(?<value>(?:.|\s)*?)(?=instance_name\s|$))*
Explination(由内而外):
(?<value>(?:.|\s)*?)
这是您想要的匹配组。 ?<value>
部分可以删除,因为我只是在本文档中添加它以供参考
(?<=instance_name\s)
仅当组'value'前面带有字符串文字'instance_name'后跟一个空格(空格,制表符,换行符)时才匹配
(?=instance_name\s|$)
仅当组'value'后跟字符串文字'instance_name'或字符串结尾
时才匹配(?: <all regex from above> )*
将上述匹配条件包含在新的非捕获组中,因为我们可能希望重复搜索字符串中的多个“instance_name”搜索
希望这可以帮助你:)
答案 2 :(得分:0)
我认为你真正想做的只是拆分你的字符串:
>>> s = '''instance_name DEDUP
...
... iops,other,1
...
... instance_name USERSPACE_APPS
...
... iops,read,158534981
...
... iops,write,168514545
...
... iops,other,1557566878
...
... total_latency,read,38774076988
...
... total_latency,write,36596756500
...
... total_latency,other,96023066014
...
... time'''
>>> s.split('instance_name')
['',
' DEDUP\n\niops,other,1\n\n',
' USERSPACE_APPS\n\niops,read,158534981\n\niops,write,168514545\n\niops,other,1557566878\n\ntotal_latency,read,38774076988\n\ntotal_latency,write,36596756500\n\ntotal_latency,other,96023066014\n\ntime']
如果要删除空字符串和空格:
>>> list(filter(bool, (chunk.strip() for chunk in s.split('instance_name'))))
['DEDUP\n\niops,other,1',
'USERSPACE_APPS\n\niops,read,158534981\n\niops,write,168514545\n\niops,other,1557566878\n\ntotal_latency,read,38774076988\n\ntotal_latency,write,36596756500\n\ntotal_latency,other,96023066014\n\ntime']
如果您的具体情况中的instance_name
不是固定字符串,但它是一种模式,那么您可以使用re.split()
。