Python 构造regexp表达式以检查特定的文本数据库格式
假设我有一个文本文件,它通过使用Python 构造regexp表达式以检查特定的文本数据库格式,python,regex,matlab,Python,Regex,Matlab,假设我有一个文本文件,它通过使用|符号来分隔数据库列,充当一个简单的数据库: |some text| 234| other field| bla| 1232| 我想构造一个将 检查每行中有多少字段(通过计算|符号的出现次数) 检查哪些字段为空(两个|符号之间没有文本) 将返回每个字段的值 将从字段值周围去除空白。但要小心,空旷的田野不应该被剥去 这里有两个例子来说明我想要什么: line = |some text| 234| other field| bla| 1232| output =
|
符号来分隔数据库列,充当一个简单的数据库:
|some text| 234| other field| bla| 1232|
我想构造一个将
- 检查每行中有多少字段(通过计算
符号的出现次数)|
- 检查哪些字段为空(两个
符号之间没有文本)|
- 将返回每个字段的值
- 将从字段值周围去除空白。但要小心,空旷的田野不应该被剥去李>
line = |some text| 234| other field| bla| 1232|
output = my_regexp(line)
disp(output)
'some text', '234', 'other field', 'bla', '1232'
现在相同,但此时间字段3为空:
line2 = |some text| 234| | bla| 1232|
output = my_regexp(line)
disp(output)
'some text', '234', '', 'bla', '1232'
我试过以下方法
values = regexp(regexprep(line '[\s]', ''), '\|', 'split')
但不幸的是,这一解决方案并不适用
- 检查有多少
存在|
- 不保留返回值的字段顺序,因为将忽略空字段
- 告诉我哪个字段是空的
我从未建立过复杂的regexp规则,非常感谢您的输入 这可以使用
行来完成。拆分如下:
values = [v.strip() for v in line.split("|")[1:-1]]
num_fields = len(values)
num_empty_fields = values.count("")
要获取空字段的索引列表,请执行以下操作:
indices_empty_fields = [i for i, f in enumerate(values) if f == ""]
要使用正则表达式,请将值的计算替换为:
import re
values = re.split("\s*\|\s*", line)[1:-1]
我不会在这里使用正则表达式;对于这么简单的工作来说,它们太复杂了
仅在管道符号上拆分:
>>> '|some text| 234| other field| bla| 1232|'.split('|')
['', 'some text', ' 234', ' other field', ' bla', ' 1232', '']
丢弃第一个值和最后一个值,去掉其余值以删除空白,您就有了列:
>>> example = '|some text| 234| other field| bla| 1232|'
>>> columns = map(lambda s: s.strip(), example.split('|')[1:-1])
>>> columns
['some text', '234', 'other field', 'bla', '1232']
要在不拆分的情况下对列进行计数,只需使用.count()
函数,减去1:
>>> example.count('|') - 1
5
或者获取列输出的len
:
>>> len(columns)
5
要计算空列数吗?拆分这些列并计算空列:
>>> columns.count('')
0
或者你的第二行:
>>> line2 = '|some text| 234| | bla| 1232|'
>>> columns_line2 = map(lambda s: s.strip(), line2.split('|')[1:-1])
>>> columns_line2
['some text', '234', '', 'bla', '1232']
>>> columns_line2.count('')
1
你为什么给这条蟒蛇贴标签?示例代码行似乎是Matlab-您想要Python解决方案吗?@DavidRobinson我不在乎它是Matlab还是Python解决方案。我都很感激。希望没问题@戴维德罗宾森是的,伙计,现在你把我弄糊涂了。我喜欢你的解决方案,但现在你又使用了regexp:)@MartijnPieters:我的主要意思是,你不需要使用regex来计算字段数或空字段数,但你是对的!Edited@DavidRobinson通过访问值
,有没有一种简单的方法来找出哪个字段是空的?@memyself:当你说“哪个字段是空的”:你是指一个空字段的索引列表?@memyself:当然,我把它加回去了,但两种方法之间确实没有太大区别(在某种客观意义上足以判断一个比另一个好)。