我有以下要拆分为列表的字符串。我正在尝试弄清楚如何将其分割为数字,然后在数字之前加上空格。
我尝试了以下方法,这几乎是我所需要的。
\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']
答案 0 :(得分:5)
一个选择可能是匹配一个空格,并使用正向前瞻断言右边的1+数字,然后是非+空格字符:
\s(?=\d+(?!\S))
\s
空格字符(?=
积极向前看,确认右边的内容
\d+
匹配1个以上的数字(?!
负向查找,断言直接在右边的不是
\S
匹配非空格字符)
近距离否定预测您的代码可能如下:
import re
tmplist = re.split(r'\s(?=\d+(?!\S))', 'Dual 425mm AutoCannon 25')
print(tmplist)
结果
['Dual 425mm AutoCannon', '25']
看到regulex视觉
答案 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']