[英]how do you do regex in python
我有一个像这样的字符串:
data='WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage
'
我需要摆脱一切,直到正则表达式中下划线(包括)的第一个实例。
我试过这个:
re.sub("(^.*\_),"", data)
但是在所有下划线之前,这会让所有东西都消失
ProcessCpuUsage
我需要它:
jvmRuntimeModule_ProcessCpuUsag
请改用:
from string import find
data='WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage'
result = data[find(data, "_")+1:]
print result
试试这个正则表达式:
result = re.sub("^.*?_", "", text)
正则表达式^.*?_
是什么:
^
..断言位置在字符串的开头。 .*?
.. Match every character that is not a linebreak character between zero and unlimitted times as few times as possible.
-
..匹配字符_
re.sub("(^.*\\_),"", data)
这使得 。 匹配行中的每个字符。 一旦它到达终点,并且无法再匹配“。”,它将转到下一个令牌。 糟糕,这是一个下划线! 因此,它在_ProcessCpuUsage之前回溯,它可以在开始时匹配下划线,然后完成匹配。
你应该问问。 乘数不那么贪心。 您也不需要捕获内容。 放下parens。 反斜杠什么都不做。 算了吧。 领先的线路起跑锚也什么也没做。 算了吧。
re.sub(".*?_,", data)
你可以使用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'
看看这里的字符串方法
你已成为贪婪匹配的受害者。 表达式匹配它可能的最长序列。
我知道有一种方法可以关闭贪婪的匹配,但我从来没有记住它。 相反,当我想要停留的角色时,我会使用一个技巧。 而不是匹配每个字符.
我匹配每个角色,除了我想要停留的角色。
re.sub("(^[^_]*\_", "", data)
尝试使用split()
:
s = 'WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage'
print(s.split('_',1)[1])
结果 :
jvmRuntimeModule_ProcessCpuUsage
这应该做:
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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.