Python字符串仅在数字前或后跟空格的情况下拆分

时间:2019-05-01 20:18:57

标签: python regex

我有以下要拆分为列表的字符串。我正在尝试弄清楚如何将其分割为数字,然后在数字之前加上空格。

我尝试了以下方法,这几乎是我所需要的。

\s+(?=\d)|(?<=\d)\s+

尝试

import re

# Find the numeric values: 
tmplist = re.split(r'\s+(?=\d)|(?<=\d)\s+', 'Dual 425mm AutoCannon 25') 


# Print the list
print(tmplist)

这是结果:

['Dual', '425mm AutoCannon', '25']

这是理想的结果:

['Dual 425mm AutoCannon', '25']

2 个答案:

答案 0 :(得分:5)

一个选择可能是匹配一个空格,并使用正向前瞻断言右边的1+数字,然后是非+空格字符:

\s(?=\d+(?!\S))
  • \s空格字符
  • (?=积极向前看,确认右边的内容
    • \d+匹配1个以上的数字
    • (?!负向查找,断言直接在右边的不是
      • \S匹配非空格字符
    • )近距离否定预测
  • 正面回望

Regex demo | Python demo

您的代码可能如下:

import re
tmplist = re.split(r'\s(?=\d+(?!\S))', 'Dual 425mm AutoCannon 25') 
print(tmplist)

结果

['Dual 425mm AutoCannon', '25']

看到regulex视觉

enter image description here

答案 1 :(得分:0)

并不是最漂亮的,但是由于有时很难阅读正则表达式,或者回过头来记住为什么要做的事情,因此此函数可以完成您想做的事情。我只是为了确保文本能继续工作而对文本进行了扩展。

def split_on_number(text):

    final = [text.split()[0]]  # Autoload the first item
    for i in text.split()[1:]: # Ignore the first item

        try:
            #Try to convert it to a float
            float(i)           

        except ValueError: 
            # if there's an issue, append to last item
            final[-1] = " ".join([final[-1], i]) 

        else:
            # if you can covnert to a float, then append it
            final.append(i)    

    return final

print(split_on_number('Dual 425mm AutoCannon 25 with another 4 items'))
# ['Dual 425mm AutoCannon', '25 with another', '4 items']