Python:字符串拆分与分隔符的例外

时间:2014-01-08 14:50:21

标签: python regex split

我是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']的问题。

有没有办法覆盖此特定实例中的空间,例如使用正则表达式?

3 个答案:

答案 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']