Python3 中的优雅字符串解析
Elegant String Parsing in Python3
我有需要放入列表中的字符串;例如我要求
C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C
变成
['C', 'C', '.0033', '.0016', 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4', 'C']
因此引号中的所有内容都成为一个列表元素;否则,由白色 space 分隔的所有内容都将成为单个列表元素。
我的第一个想法是简单拆分,将不包含 '
的项放入一个新数组中,然后将引用部分中的项重新放在一起:
>>> s.split()
['C', 'C', '.0033', '.0016', "'International", 'Tables', 'Vol', 'C', 'Tables', '4.2.6.8', 'and', "6.1.1.4'", 'C']
>>> arr = []
>>> i = 0
>>> while i < len(s):
v = ''
if s[i].startswith("'"):
while not s[i].endswith("'"):
v = v.append(s[i]+ " ")
i += 1
v.append(s[i])
arr.append(v)
else:
arr.append(s[i])
但是这个策略很丑陋,另外我不得不假设字符串被分割成一个 space.
s.partition("'")
看起来很有希望:
>>> s.partition("'")
('C C .0033 .0016 ', "'", "International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C")
但这很尴尬,因为我必须在遍历时再次分区,而且它是上下文敏感的是引号。
是否有一种简单的 Python3 方法可以如上所述拆分此字符串?
您可以使用shlex
模块。示例:
import shlex
print(shlex.split("C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C"))
我有需要放入列表中的字符串;例如我要求
C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C
变成
['C', 'C', '.0033', '.0016', 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4', 'C']
因此引号中的所有内容都成为一个列表元素;否则,由白色 space 分隔的所有内容都将成为单个列表元素。
我的第一个想法是简单拆分,将不包含 '
的项放入一个新数组中,然后将引用部分中的项重新放在一起:
>>> s.split()
['C', 'C', '.0033', '.0016', "'International", 'Tables', 'Vol', 'C', 'Tables', '4.2.6.8', 'and', "6.1.1.4'", 'C']
>>> arr = []
>>> i = 0
>>> while i < len(s):
v = ''
if s[i].startswith("'"):
while not s[i].endswith("'"):
v = v.append(s[i]+ " ")
i += 1
v.append(s[i])
arr.append(v)
else:
arr.append(s[i])
但是这个策略很丑陋,另外我不得不假设字符串被分割成一个 space.
s.partition("'")
看起来很有希望:
>>> s.partition("'")
('C C .0033 .0016 ', "'", "International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C")
但这很尴尬,因为我必须在遍历时再次分区,而且它是上下文敏感的是引号。
是否有一种简单的 Python3 方法可以如上所述拆分此字符串?
您可以使用shlex
模块。示例:
import shlex
print(shlex.split("C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C"))