从混合提取数字字符串

721(30天)
K E
K E 2012年7月19日
编辑: Angkur Shaikeea2021年10月21日
我有一个文件包含标题行如下,
测试设置:MaxDistance = 60米率= 1.000,允许的错误= 50
操作符注意:空气温度= 20 C、风速度16.375米/秒,高度5公里(阴)
对于一个给定的参数如MaxDistance或风速,我想提取其数值。这是棘手的,因为有时有一个等号,空间,或单位,有时没有,因为不同的运营商进入他们的笔记不同(下次课:执行的一致性)。
我怎么提取以下 :所有数字字符(忽略空格和等号,但保持小数点)后出现代表参数名称的字符串。停止当一个字母或标点符号。在“MaxDistance”的情况下,我将获得60。在风速的情况下,我将获得16.375。
2的评论
Jianming她
Jianming她 2020年6月17日
编辑:Jianming她 2020年6月18日
这似乎是一个更一般的方法:
函数numArray = extractNumFromStr (str)
str1 = regexprep (str,“[,,=]”,' ');
str2 = regexprep (regexprep (str1' [^ - 0 - 9. - ee (,) /)”,),“\ D *”,' ');
str3 = regexprep (str2, {“\ \ s”。,' \ E \ s ',' \ e \ s ',“\ s \ E”,“\ s \ e”},' ');
numArray = str2num (str3);
例子:
一个=“α= -3.5,β= 1飞行。但γ= -34.1
numArray = extractNumFromStr (a)
numArray =
-3.5000 0.0100 -34.1000

登录置评。

接受的答案

1月
1月 2012年7月19日
编辑:1月 2012年7月19日
将文件导入到一个字符串,例如 fileread 。然后你会得到这样的(如果不是,请解释所有必要的细节):
Str = [测试设置:MaxDistance = 60米,率= 1.000,“,
的允许误差= 50操作员注意:空气温度= 20 C,”,
风速16.375米/秒,高度5公里(阴)];
现在忽略所有相同字符:
Str (strfind (Str,“=”))= [];
最后你可以得到的值:
关键=“MaxDistance”;
指数= strfind (Str,关键);
值= sscanf (Str(索引(1)+长度(关键):结束),“% g”1);
”指数(1)“关心多个出现的关键。
3评论
洛伦佐
洛伦佐 2013年10月30日
这是太棒了!1月只是一个简单的问题:如果你想要找到的所有uccurrence两个字符串之间数值?例如,假设你想要的数值可以找到MaxDistance与海拔之间最初的例子(例如1000、50 ecc ecc…)。你怎么做到的呢?
我试着这样的:
Key1 =“MaxDistance”;Key2 =“高度”;Index1 = strfind(文件,Key1);Key2 Index2 = strfind(文件);价值= sscanf(文件(Index1: Index2), ' % g ', 1);
但我仍然可以得到除了第一个值....另外,我不知道先验数据的数量,可以两个字符串之间的encontured……
谢谢!
洛伦佐

登录置评。

更多的答案(5)

Stephan克勒
Stephan克勒 2017年6月7日
这是一行回答str2num (regexprep (Str, {\ D * ((\ D \] + \ D) [^ \ D] *’,‘[^ \ \。]*},{' $ 1 ',' '}))
2的评论
马可·a·Acevedo Z。
马可·a·Acevedo Z。 2021年4月2日
嗨,好的答案但是如何包括——(如果存在)。谢谢。

登录置评。


弗莱迪
弗莱迪 2012年7月19日
也许有点太迟了,但我想现在你也(“regexp培训”)的解决方案。:)
一个= regexp (Str,‘(? <关键词> (?:\ w + \ s * \ w +)) \ s * = ? \ s *(<价值> \ d + \。? \ d *)”,“名字”);
s =结构();
我=,
年代。(genvarname(我。“关键字”)))= str2double(我。“价值”));
结束
1评论
艾伯特山药
艾伯特山药 2012年7月19日
编辑:艾伯特山药 2012年7月19日
我花了很长时间去理解你所做的。那很酷。
它是怎样跳过“操作员注意:”?
编辑:别管我得到它。它没有任何‘:’。“(?:\ w”与“:”的字符串,它是分组的令牌”两个字的。

登录置评。


艾伯特山药
艾伯特山药 2012年7月19日
这就是我,所有步骤包括甚至错误。
teststr =测试设置:MaxDistance = 60米,率= 1.000,允许误差= 50操作员注意:空气温度= 20 C,风速16.375米/秒,高度5公里(阴);
正则表达式(teststr, [\ d])
正则表达式(teststr [“\ d”])
正则表达式(teststr [“\ d”),“匹配”)
正则表达式(teststr [“\ d +”),“匹配”)
正则表达式(teststr [“\ d +。?”),“匹配”)
正则表达式(teststr [“\ d + \。?”),“匹配”)
正则表达式(teststr [‘\ d + \ ? \ d ?”),“匹配”)
正则表达式(teststr [' \ d + \ ? \ d +吗?”),“匹配”)
正则表达式(teststr [' \ d + \ ? \ d * ?”),“匹配”)
正则表达式(teststr [‘\ d + \ ? \ d ?”),“匹配”)
正则表达式(teststr [' \ d + \ ? \ d *’),“匹配”)
6个评论
Angkur Shaikeea
Angkur Shaikeea 2021年10月21日
编辑:Angkur Shaikeea 2021年10月21日
我需要提取
0.00000 0.00000 0.00000
0.00000 1.00000 0.00000
1.00000 0.00000 0.00000
从一个文本文件包含
.............................................
节点的位置:
0.00000 0.00000 0.00000
0.00000 1.00000 0.00000
1.00000 0.00000 0.00000
节点的位置:
0.00000 0.00000 0.00000
0.00000 1.00000 0.00000
1.00000 0.00000 0.00000
节点的位置:
0.00000 0.00000 0.00000
0.00000 1.00000 0.00000
1.00000 0.00000 0.00000
任何帮助使用正则表达式?

登录置评。


C.J.哈里斯
C.J.哈里斯 2012年7月19日
为了提取一定的价值:
Str = [测试设置:MaxDistance = 60米,率= 1.000,“,
的允许误差= 50操作员注意:空气温度= 20 C,”,
风速16.375米/秒,高度5公里(阴)];
matchWord =“气温”;
[a, b] = regexp (Str,' \ d + (\ \ d +) ?”);
=找到大小写敏感(> strfind (Str, matchWord), 1,“第一”);
nValue = str2double (Str((大小写敏感):b(大小写敏感)));

薛大海
薛大海 2016年3月10日
编辑:KSSV 2021年1月25日
C.J.哈里斯,我把您的regexp到一个函数中使用正则表达式提取所有的数字。我很难找到一个数组操作,可以使用' a '和' b '没有循环。希望有人的想法。当然不难增加更多的参数或选项找到“肯定”数字与前或后具有里程碑意义的字符串。
函数num = regExtractNums (str)
[a, b] = regexp (str,' \ d + (\ \ d +) ?”);
num = 0(长度(a), 1);
k = 1:长度(a)
num (k) = str2double (str ((k): b (k)));
结束
结束

类别

找到更多的在字符和字符串帮助中心文件交换

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!