繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM