我在改进我的 ECAD 软件(即 KiCad)的半自动化库管理时遇到了这个困境,下面的内容只是一个示例,我希望它代表我遇到的问题。
库文件包含多行,有时该行可以在其中一个字段中嵌入双引号,这是通过添加转义\
字符来管理的。例如:
string = "\"This is a \\\"difficult\\\" problem\" please help"
print(f'string = {string}')
将输出:
string = "This is a \"difficult\" problem" please help
我需要使用 shlex 拆分这个字符串(这是选择的解决方案,我想保留它),遵循这两个条件:
- “这是……问题”必须是单个列表项
- 需要保留“这个...问题”和“困难”周围的双引号。
注意:在这个例子中,另外两个词please
和help
不需要特殊处理。
我已经尝试过两者posix=False
和posix=True
:
- 使用
posix=False
s1 = shlex.shlex(string, posix=False)
slist1 = list(s1)
print(f'slist1 = {slist1}')
输出:
slist1 = ['"This is a \\"', 'difficult', '\\', '" problem"', 'please', 'help']
- 使用
posix=True
s2 = shlex.shlex(string, posix=True)
slist2 = list(s2)
print(f'slist2 = {slist2}')
输出:
slist2 = ['This is a "difficult" problem', 'please', 'help']
在第一种情况下,您可以立即看到它不满足条件 #1。
在第二种情况下,它几乎满足了这两个条件,但未能保留“这是……问题”周围的双引号。我不能只在拆分后添加它们,因为我不知道字符串在列表中的位置,并且我不想将双引号添加到所有条目。
有没有解决这个问题的窍门,还是我只是碰壁了?
我真的很感激帮助!