如何访问数据的regexp输出(没有临时变量)?
26日视图(30天)
显示旧的评论
我知道如何regexp()的输出转换为一个表通过一个临时变量的媒介解决方案:
开始于= [“苹果001”;102“香蕉”;“橙色344 001”];
C = regexp(开始于' \ s ',“分裂”,“一次”);%临时变量
array2table (vertcat (C {:,:}))%期望输出值,除了希望避免括号的方法。
%我尝试了这一点,但它不给期望的结果。
cell2table(正则表达式(开始于,' \ s ',“分裂”,“一次”))
0评论
接受的答案
Stephen23
2023年4月26日
编辑:Stephen23
2023年4月26日
一般的答案自2012年以来一直没有什么变化。
使用临时变量并不是像许多初学者想象的“低效率”(最有可能的MATLAB将生成中间细胞内部数组)。
str = [“苹果001”;102“香蕉”;“橙色344 001”];
台= splitvars (cell2table(正则表达式(str,' \ s ',“分裂”,“一次”)))
注意,这个创建并丢弃一个中间表,所以使用更多的内存。
我个人推荐使用中间变量:当代码高尔夫是非常有趣的,它不提供清晰和效率的目的。在一年内你会回到这段代码任何想知道它,它是如何工作的,它有什么副作用。阅读更多倍比写代码,所以清晰阅读时是有价值的。
除此之外,隐藏中间数组内嵌套的函数调用使调试更加困难。
更多的答案(3)
albara
2023年4月26日
编辑:每•艾萨克森
2023年4月26日
您可以访问的数据
正则表达式
直接输出不使用临时变量使用语法
[~,~,~,配]= regexp (str, expr)
,在那里
str
输入字符串和吗
expr
是你想匹配的正则表达式。
的
正则表达式
函数返回多个输出,包括比赛的开始和结束索引,任何令牌被正则表达式匹配的子串。通过使用
~
象征作为一个占位符输出你不需要,你可以忽略它们,只有保持匹配的子串。
这是一个例子:
%定义输入字符串和正则表达式
str =“那只敏捷的棕色狐狸跳过了懒惰的狗的;
expr =“棕色”;
%使用正则表达式查找匹配的子串和直接访问它
[~,~,~,配]= regexp (str, expr);
%显示匹配的子串
disp(匹配)
在这个例子中,
正则表达式
用于查找这个词的第一次出现在输入字符串“棕色”
str
。的
~
象征作为一个占位符的输出我们不需要,和
匹配
变量是用来存储直接匹配的子串。
这段代码将字符串的输出
“棕色”
。注意,您可以访问其他任何输出
正则表达式
通过使用相应的占位符变量,如
(开始、结束标记,匹配)= regexp (str, expr)
存储开始和结束指数和分离变量的任何标记。
里克
2023年4月26日
如果你坚持一行,您甚至可以使用
subsref
指数的结果
正则表达式
。这将使您的代码难以阅读,很难修改。
你为什么不写一个包装器函数可以调用
regexp2table
是这样的:
开始于= [“苹果001”;102“香蕉”;“橙色344 001”];
regexp2table(开始于' \ s ',“分裂”,“一次”)%看,妈,一行
函数选项卡= regexp2table(变长度输入宗量)
%所有输入都输送到正则表达式()。
C = regexp(变长度输入宗量{:});
选项卡= array2table (vertcat (C {:}));
结束
Dyuman Joshi
2023年4月26日
试验导致——
str = [“苹果001”;“香蕉102 3579”;“橙色344 001”]
C = array2table ([extractBefore (str,' ')extractAfter (str,' ')))