我是Python新手,我目前正在尝试拆分字符串,如下所示:
910501857403 TBS465 3 TL5 14 W K HFP否D8-VH
看起来像:
['910501857403','TBS465','3','TL5','14 W','K','HFP','No','D8-VH']
如果我使用:
ln.split('')
以空格作为分隔符,我有['14 W']成为['14','W']的问题。
有没有办法覆盖此特定实例中的空间,例如使用正则表达式?
答案 0 :(得分:0)
如果它总是第4和第5个元素不应该被拆分,你可以简单地做:
s = "910501857403 TBS465 3 TL5 14 W K HFP No D8-VH"
l = s.split()
l[4] = l[4] + " " + l[5]
l.pop(5)
如果假设不正确,则必须非常准确地指定模式。
修改强>
根据上面的评论,您可以先按上述方法拆分字符串,然后使用列表理解:
[x + " " + y if y in ["W","V"] else x for x,y in zip(l[:-1],l[1:]) if x not in ["W","V"]]
答案 1 :(得分:0)
这有效:
teststring = '910501857403 TBS465 3 TL5 14 W K HFP No D8-VH'
re.findall(r'\w+\b(?! [WV])|\w+\b [WV]', teststring)
['910501857403', 'TBS465', '3', 'TL5', '14 W', 'K', 'HFP', 'No', 'D8', 'VH']
这是如何工作的:基本上,\w+\b
匹配一个alnum字符,后跟一个单词分隔符。 |
表示我们匹配两种模式中的任何一种。第一个模式使用负前瞻断言,如果后面的字符是空格而不是W或V,则不匹配。第二个术语匹配单词后跟W或V.
如果您对输入的按摩过于复杂,我同意评论,我会分开并进行后处理。
答案 2 :(得分:0)
为了简单地强制你想要的东西,我想为什么不只是连接两个字符串然后删除“键”值
s = "910501857403 TBS465 3 TL5 14 W K HFP No D8-VH"
l = s.split()
keys = ["W","V"]
for i in range(len(l)-1):
if l[i] in keys:
l[i-1] += " " +l[i]
l.pop(i)
print(l)
输出:
['910501857403','TBS465','3','TL5','14 W','K','HFP','No','D8-VH']