我有一个文件,其中的行格式为#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);
答案 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的第二个参数,而是传递了一个函数,在函数中,我们可以使用更多的正则表达式处理匹配的结果,并在将结果传回之前重新格式化结果。