删除括号中除#number以外的所有内容

时间:2019-11-27 13:36:50

标签: python

我有一个文件,其中的行格式为#nr =名称(#nr,(#nr),不同的var和名称)。

我只想将#nr放在方括号中,以获取格式#nr = name(#nr,#nr)

我试图以不同的方式解决此问题,例如使用正则表达式,startswith()和列表,但到目前为止没有任何效果。

非常感谢您的帮助。

编辑:代码


for line in f.split():

    start = line.find( '(' )
    end = line.find( ')' )
    if start != -1 and end != -1:
        line = ''.join(i for i in x if not i.startswith('#'))
    print(line)

编辑2: 例如,我有:

#304= IFCRELDEFINESBYPROPERTIES('0FZ0hKNanFNAQpJ_Iqh4zM',#42,$,$,(#142),#301);

之后我要拥有:

#304= IFCRELDEFINESBYPROPERTIES(#42,#142,#301);

1 个答案:

答案 0 :(得分:1)

这可以使用正则表达式解决,尽管尝试通过单个查找/替换来完成将更为复杂。相反,您可以分两个步骤进行操作:

import re

def sub_func(match):
    nums = re.findall(r'#\d+', match.group(2))
    return match.group(1) + '(' + ','.join(nums) + ');'

text = "#304= IFCRELDEFINESBYPROPERTIES('0FZ0hKNanFNAQpJ_Iqh4zM',#42,$,$,(#142),#301);"
result = re.sub(r'(^[^(]+)\((.*)\);', sub_func, text)
print(result)
# '#304= IFCRELDEFINESBYPROPERTIES(#42,#142,#301);'

因此,我们没有传递一个字符串作为re.sub的第二个参数,而是传递了一个函数,在函数中,我们可以使用更多的正则表达式处理匹配的结果,并在将结果传回之前重新格式化结果。