首页 > 解决方案 > 在python中通过正则表达式解析字符串

问题描述

如何在 python 中解析这个字符串?

输入字符串:

someplace 2018:6:18:0 25.0114 95.2818 2.71164 66.8962 Entire grid contents are set to missing data

对此

输出数组:

['someplace','2018:6:18:0','25.0114','95.2818','2.71164','66.8962','Entire grid contents are set to missing data']

我已经尝试过,split(' ')但由于不清楚子字符串之间有多少空格,并且在最后一个子字符串内可能有空格,所以这不起作用。

我需要正则表达式。

标签: pythonregexpython-3.xpython-2.7

解决方案


如果您不提供sep字符,pythons split(sep=None, maxsplit=-1) (doku)会将连续的空格视为一个空格并由这些空格分隔。您可以通过提供maxsplit值来限制要完成的拆分数量:

data = "someplace 2018:6:18:0 25.0114  95.2818  2.71164  66.8962    Entire grid contents are set to missing data"

spl = data.split(None,6) # dont give a split-char, use 6 splits at most
print(spl)

输出:

['someplace', '2018:6:18:0', '25.0114', '95.2818', '2.71164', 
 '66.8962', 'Entire grid contents are set to missing data']

只要第一个文本不包含任何空格,这将起作用。


如果第一个文本可能包含空格,您可以使用/优化此正则表达式解决方案:

import re

reg = re.findall(r"([^\d]+?) +?([\d:]+) +?([\d.]+) +?([\d.]+) +?([\d.]+) +?([\d.]+) +(.*)$",data)[0]
print(reg)

输出:

('someplace', '2018:6:18:0', '25.0114', '95.2818', '2.71164', '66.8962', 'Entire grid contents are set to missing data')

使用 fe https://regex101.com针对您的其他数据检查/证明正则表达式(点击链接,它在示例数据上使用上述正则表达式)


推荐阅读