0

我在改进我的 ECAD 软件(即 KiCad)的半自动化库管理时遇到了这个困境,下面的内容只是一个示例,我希望它代表我遇到的问题。

库文件包含多行,有时该行可以在其中一个字段中嵌入双引号,这是通过添加转义\字符来管理的。例如:

string = "\"This is a \\\"difficult\\\" problem\" please help"
print(f'string = {string}')

将输出:

string = "This is a \"difficult\" problem" please help

我需要使用 shlex 拆分这个字符串(这是选择的解决方案,我想保留它),遵循这两个条件:

  1. “这是……问题”必须是单个列表项
  2. 需要保留“这个...问题”和“困难”周围的双引号。

注意:在这个例子中,另外两个词pleasehelp不需要特殊处理。

我已经尝试过两者posix=Falseposix=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。

在第二种情况下,它几乎满足了这两个条件,但未能保留“这是……问题”周围的双引号。我不能只在拆分后添加它们,因为我不知道字符串在列表中的位置,并且我不想将双引号添加到所有条目。

有没有解决这个问题的窍门,还是我只是碰壁了?

我真的很感激帮助!

4

0 回答 0