2024-04-19 08:06:30 发布
网友
我有Linux上的进程名列表。有些有斜杠,有些没有。例如
郭克23:1
我只需要提取进程名,不需要斜杠和其他。我试过几种不同的方法,但还是不能完全正确。我的正则表达式怎么了?任何帮助都将不胜感激。你知道吗
>>> str='kworker/23:1' >>> match=re.search(r'^(.+)\/*',str) >>> match.group(1) 'kworker/23:1'
regex的另一种替代方法是split在斜杠上并取第一项:
split
>>> s ='kworker/23:1' >>> s.split('/')[0] 'kworker'
当字符串不包含斜杠时,也可以这样做:
>>> s = 'qmgr' >>> s.split('/')[0] 'qmgr'
但是如果你要坚持re,我认为re.sub就是你想要的,因为你不需要获取匹配的组:
re
re.sub
>>> import re >>> s ='kworker/23:1' >>> re.sub(r'/.*$', '', s) 'kworker'
另一方面,将名称str指定给内置的字符串类型,这是您不需要的。你知道吗
str
正则表达式的问题是,贪婪的.+一直持续到最后,因为它后面的所有内容都是可选的,这意味着它尽可能短(基本上是空的)。要解决此问题,请将.替换为/以外的任何内容。你知道吗
.+
.
/
([^\/]+)\/?.*
工作。您可以测试这个正则表达式here。如果对您来说是新的,[^\/]匹配除斜杠以外的任何字符,因为开头的^反转匹配的字符。你知道吗
[^\/]
^
或者,您也可以使用摩西·科莱多耶建议的split。split通常更适合于简单的字符串操作,而regex使您能够用很少的代码执行非常复杂的任务。你知道吗
regex的另一种替代方法是
split
在斜杠上并取第一项:当字符串不包含斜杠时,也可以这样做:
但是如果你要坚持
re
,我认为re.sub
就是你想要的,因为你不需要获取匹配的组:另一方面,将名称
str
指定给内置的字符串类型,这是您不需要的。你知道吗正则表达式的问题是,贪婪的
.+
一直持续到最后,因为它后面的所有内容都是可选的,这意味着它尽可能短(基本上是空的)。要解决此问题,请将.
替换为/
以外的任何内容。你知道吗工作。您可以测试这个正则表达式here。如果对您来说是新的,
[^\/]
匹配除斜杠以外的任何字符,因为开头的^
反转匹配的字符。你知道吗或者,您也可以使用摩西·科莱多耶建议的
split
。split
通常更适合于简单的字符串操作,而regex使您能够用很少的代码执行非常复杂的任务。你知道吗相关问题 更多 >
编程相关推荐