-1

我正在从字符串中提取值,但在删除某些字符时遇到问题。

Mandrake 9.2 (32 bit)

我从中提取的索引返回,但我想删除(32位),它的长度和位置因文件中的行而异。我使用 [0:-8] 但问题是字符串的差异,所以我在我的代码中尝试了这个

lines = re.sub(' [\d.]*', ' ', plines2)

但没有成功。

更多行:

红帽 7.3(32 位)

Redhat 8.0 (32bit)
Mac OS X 10.4
Home Premium (32bit)
Linux Ubuntu Desktop 9.10
Linux Ubuntu Desktop 9.10

它们各不相同,我希望能够删除 32 位部分以及版本,以便只有产品名称存在,它并不出现在所有行上,如您所见,有些带有版本和位版本,但有些只有一个或其他。

4

2 回答 2

1

这是你想要的吗?

import re
ss = 'Mandrake 9.2 (32 bit)'
new_line = re.sub(r'\(.*?\)','',ss)  #'Mandrake 9.2 '

请注意,这仅在您保证在一行上有一组匹配的括号时才有效...

稍作改动,我们就可以让它与您上面的所有东西一起工作:

new_line = re.sub(r'(?:\d+(?:\.\d+)*\s*)?(?:\(.*?\))?','',ss)

这将匹配版本字符串number.number.number...它还将匹配括号内的任何内容(包括在内)。每个匹配项都将从行中删除。

于 2012-07-17T17:38:49.847 回答
0
>>> import re
>>> line = "Mandrake 9.2 (32 bit)"
>>> re.sub('\(\d.*\)','',line)
'Mandrake 9.2 '

如果要删除尾随和前导空格

newstring.strip()

例如

>>> 'Mandrake 9.2 '.strip()
'Mandrake 9.2'
于 2012-07-17T17:39:01.610 回答