正则表达式匹配过程名称(不带斜杠)

2024-04-19 08:06:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有Linux上的进程名列表。有些有斜杠,有些没有。例如

郭克23:1

迁移/39 qmgr

我只需要提取进程名,不需要斜杠和其他。我试过几种不同的方法,但还是不能完全正确。我的正则表达式怎么了?任何帮助都将不胜感激。你知道吗

>>> str='kworker/23:1'
>>> match=re.search(r'^(.+)\/*',str)
>>> match.group(1)
'kworker/23:1'

Tags: 方法re列表search进程linuxmatchgroup
2条回答

regex的另一种替代方法是split斜杠上并取第一项:

>>> s ='kworker/23:1'
>>> s.split('/')[0]
'kworker'

当字符串不包含斜杠时,也可以这样做:

>>> s = 'qmgr'
>>> s.split('/')[0]
'qmgr'

但是如果你要坚持re,我认为re.sub就是你想要的,因为你不需要获取匹配的组:

>>> import re
>>> s ='kworker/23:1'
>>> re.sub(r'/.*$', '', s)
'kworker'

另一方面,将名称str指定给内置的字符串类型,这是您不需要的。你知道吗

正则表达式的问题是,贪婪的.+一直持续到最后,因为它后面的所有内容都是可选的,这意味着它尽可能短(基本上是空的)。要解决此问题,请将.替换为/以外的任何内容。你知道吗

([^\/]+)\/?.*

工作。您可以测试这个正则表达式here。如果对您来说是新的,[^\/]匹配除斜杠以外的任何字符,因为开头的^反转匹配的字符。你知道吗

或者,您也可以使用摩西·科莱多耶建议的splitsplit通常更适合于简单的字符串操作,而regex使您能够用很少的代码执行非常复杂的任务。你知道吗

相关问题 更多 >