给定一个简单的分隔符分隔文本数据库,我想构建一个regexp规则,它返回列/字段条目。
给出以下两个示例行
entry1 = '|123|some|string |101112 |'
entry2 = '|123|some| |101112 |'
我想获得以下输出:
values1 = '123', 'some', 'string', '101112'
values2 = '123', 'some', '', '101112'
到目前为止,我正在使用以下regexp
和regexprep
组合:
values = regexp(regexprep(entry '[\s]', ''), '\|', 'split')
遗憾地返回以下内容:
values1 = '' '123' 'some' 'string' '101112' ''
values2 = '' '123' 'some' '' '101112' ''
但我希望得到(''
之前没有额外123
而''
之后没有额外'101112'
:
values1 = '123', 'some', 'string', '101112'
values2 = '123', 'some', '', '101112'
根据我的正则表达式规则,为什么我在开始和结束时得到''
?如何更改正则表达式规则,仅返回字段值?
答案 0 :(得分:1)
我不确定这正是您所要求的,但您可以使用strread
:
strread(entry1(2:end),'%d','delimiter','|')
ans =
123
456
789
101112
答案 1 :(得分:0)
空字符串就在那里,因为你告诉matlab以|
字符分割。分裂意味着你在那里切割。如果|
之前没有任何内容,您将获得空字符串。例如,拆分它(regexprep
之后的子结果):
'|123|456|789|101112|'
导致(想象在|
处剪切字符串):
'', '123', '456', '789', '101112', ''
因此,要么在第一个和最后一个|
之间拆分字符串:
nospaces = regexprep(entry, '\s', '')
betweenpipes = nospaces(2:size(nospaces,2)-1)
values = regexp(betweenpipes, '\|', 'split')
..或者根本不使用拆分,只搜索所需的模式:
regexp(entry, '(?=\)(?:\s*)(\d+)(?:\s*)(?=\)', 'match')
Regexp解释道:
|
,但不记得了:(?=\|)
(?:\s*)
(\d+)
(?:\s*)
|
,但不记得了:(?=\|)
我在内存中写这个,因为我没有matlab,所以可能有一些错误..