你怎么在python中做正则表达式

时间:2015-01-06 20:27:28

标签: python regex

我有一个这样的字符串:

data='WebSpherePMI_jvmRuntimeModule_ProcessCpuUsage

我需要摆脱一切,直到正则表达式中下划线(包括)的第一个实例。

我试过这个:

re.sub("(^.*\_),"", data)

但是这会在所有事情之前解决所有问题

ProcessCpuUsage

我需要它:

jvmRuntimeModule_ProcessCpuUsag

7 个答案:

答案 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')