Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何清除来自索引的字符串_Python_String - Fatal编程技术网

Python 如何清除来自索引的字符串

Python 如何清除来自索引的字符串,python,string,Python,String,我正在从字符串中提取值,但在删除某些字符时遇到问题 Mandrake 9.2 (32 bit) 我从中提取的索引返回该值,但我想删除(32位),并且它的长度和位置在文件中每行都不同。我使用了[0:-8],但问题是字符串中的差异,所以我在代码中尝试了这一点 lines = re.sub(' [\d.]*', ' ', plines2) 但没有成功 更多行: Redhat 7.3(32位) 它们各不相同,我希望能够删除32位部分和版本,以便只有产品名称在那里,它不会出现在所有行中,正如您所看到的

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

Mandrake 9.2 (32 bit)
我从中提取的索引返回该值,但我想删除(32位),并且它的长度和位置在文件中每行都不同。我使用了[0:-8],但问题是字符串中的差异,所以我在代码中尝试了这一点

lines = re.sub(' [\d.]*', ' ', plines2)
但没有成功

更多行:

Redhat 7.3(32位)

它们各不相同,我希望能够删除32位部分和版本,以便只有产品名称在那里,它不会出现在所有行中,正如您所看到的,有些带有版本和位版本,但有些只带有一个或另一个。

这是您想要的吗

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…
它还将匹配括号内的任何内容(包括在内)。每根火柴都将从生产线中删除

>>> import re
>>> line = "Mandrake 9.2 (32 bit)"
>>> re.sub('\(\d.*\)','',line)
'Mandrake 9.2 '
如果要删除尾随空格和前导空格

newstring.strip()
比如说

>>> 'Mandrake 9.2 '.strip()
'Mandrake 9.2'

它将有助于提供“其他行”的示例,以便我们能够看到什么解决方案可能适用……我有一种感觉,类似于
ss.split(“(”,1)[0]。rstrip()
将满足OP的要求,但由于它们没有eloborate,很难判断。PS-可能是“*?”?@JonClements——也许我今天很忙,但是你在PS中把我弄丢了。你说的“*?”是什么意思?@JonClements——是的。谢谢。我偶尔使用正则表达式,但我的技能仍然不那么敏锐。我已经更新了(希望正确)。这很好,但正如您所说,它只适用于有保证的括号集。他的方法有效,但我使用的是列表中的值,因此.strip()属性对其不起作用。strip_list=[re.sub('(\d.*)',,e).strip()在原始_列表中代表e]?
>>> 'Mandrake 9.2 '.strip()
'Mandrake 9.2'