我有一个这样的字符串:
data='WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage
“
我需要摆脱一切,直到正则表达式中下划线(包括)的第一个实例。
我试过这个:
re.sub("(^.*\_),"", data)
但是这会在所有事情之前解决所有问题
ProcessCpuUsage
我需要它:
jvmRuntimeModule_ProcessCpuUsag
答案 0 :(得分:2)
请改用:
from string import find
data='WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage'
result = data[find(data, "_")+1:]
print result
答案 1 :(得分:1)
试试这个正则表达式:
result = re.sub("^.*?_", "", text)
正则表达式^.*?_
的作用:
^
..断言位置位于字符串的开头。.*?
.. Match every character that is not a linebreak character
between zero and unlimitted times as few times as possible.
-
..匹配字符_ 答案 2 :(得分:1)
re.sub("(^.*\_),"", data)
这样做。匹配行中的每个字符。一旦它到达终点,并且无法再匹配“。”,它将转到下一个令牌。糟糕,这是一个下划线!因此,它在_ProcessCpuUsage之前回溯,它可以在开始时匹配下划线,然后完成匹配。
你应该问问。乘数不那么贪心。您也不需要捕获内容。放下parens。反斜杠什么都不做。算了吧。领先的线路起跑锚也什么也没做。放弃它。
re.sub(".*?_,", data)
答案 3 :(得分:1)
您可以使用str.index
:
>>> data = 'WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage'
>>> data[data.index('_')+1:]
'jvmRuntimeModule_ProcessCpuUsage'
使用str.split
>>> data.split('_',1)[1]
'jvmRuntimeModule_ProcessCpuUsage'
使用str.find
:
>>> data[data.find('_')+1:]
'jvmRuntimeModule_ProcessCpuUsage'
查看字符串方法Here
答案 4 :(得分:1)
你已成为贪婪匹配的受害者。表达式匹配它可能的最长序列。
我知道有办法可以关闭贪婪的匹配,但我永远不记得了。相反,当我想要停留的角色时,我会使用一个技巧。我没有在.
的每个角色上匹配,而是匹配除了我想要停留的角色之外的每个角色。
re.sub("(^[^_]*\_", "", data)
答案 5 :(得分:1)
尝试使用split()
:
s = 'WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage'
print(s.split('_',1)[1])
<强>结果强>:
jvmRuntimeModule_ProcessCpuUsage
答案 6 :(得分:1)
这应该做:
import re
def get_last_part(d):
m = re.match('[^_]*_(.*)', d)
if m:
return m.group(1)
else:
return None
print get_last_part('WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage')