Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式,用于在html表中拾取包含所需文本的行_Html_Regex_Matlab - Fatal编程技术网

正则表达式,用于在html表中拾取包含所需文本的行

正则表达式,用于在html表中拾取包含所需文本的行,html,regex,matlab,Html,Regex,Matlab,,但uhrm,我想使用regexp(实际上我会使用其他东西,但我想在Matlab函数中执行此任务)在html表中选择包含所需关键字的单行 我正在使用Matlab调用函数regexpi(regexp的不区分大小写版本),这与我所知道的PHPregex类似 好的,下面是要解析的此类html表的一个片段: <tr><td><a href="blu">blu</a></td><td>value</td></tr&g

,但uhrm,我想使用regexp(实际上我会使用其他东西,但我想在Matlab函数中执行此任务)在html表中选择包含所需关键字的单行

我正在使用
Matlab
调用函数
regexpi
(regexp的不区分大小写版本),这与我所知道的
PHP
regex类似

好的,下面是要解析的此类html表的一个片段:

<tr><td><a href="blu">blu</a></td><td>value</td></tr><tr><td><a
href="bla">findme</a></td><td>value</td></tr><tr><td><a
href="ble">ble</a></td><td>value</td></tr>
value
要拾取的所需行包含单词“findme”

(添加:)表中其他单元格和标记的内容可以是任何内容(此处“bla”是一个虚拟值)-重要的部分是“findme”的存在,并且捕捉到一行(不是更多行)(或者所有包含“findme”的行,但不期望出现这种行为)。wikipedia页面中的任何成对名称/值表就是一个很好的例子

我尝试使用Matlab文档中我能找到的任何东西(向前/向后看,组合:,>和?),但未能确定一个模式,该模式将选择正确的行(或所有包含关键字“findme”)的行。例如,以下模式将拾取文本,但不会拾取整行:
]*>[^>]*.*(findme)。*?(.*?findme.*?)]*>
拾取行,但过于贪婪,会拾取前面的行

请注意,我最初设定的任务是捕获整个表,然后解析这些表,但是嵌套表有问题(或者我在为任务实现它时遇到问题)


问题是如何在matlab函数中以编程方式(无需调用外部程序)从html表返回包含所需关键字的行?额外的问题是如何解决嵌套表问题,但这可能是另一个问题。

我建议您使用拆分字符串并用于筛选,这比正则表达式模式更易于阅读和维护:

htmlString = ['<tr><td><a href="blu">blu</a></td><td>value</td></tr><tr><td><a',...
'href="bla">findme</a></td><td>value</td></tr><tr><td><a',...
'href="ble">ble</a></td><td>value</td></tr>'];

keyword = 'findme';
splitStrings = strsplit(htmlString,'<tr>');
desiredRow = ['<tr>' splitStrings{contains(splitStrings,keyword)}] 
htmlString=['valuevalue'];
关键词='findme';
splitStrings=strsplit(htmlString,”);
desiredRow=[''splitStrings{contains(splitStrings,关键字)}]
输出为:

<tr><td><ahref="bla">findme</a></td><td>value</td></tr>

或者,您也可以组合和:

allRows=extractBetween(htmlString,,'');
desiredRow=[''所有行{包含(所有行,关键字)}']

如果必须使用正则表达式:

regexp(htmlString,['<tr><td>[^>]+>' keyword '.*?<\/tr>'],'match')
regexp(htmlString,['[^>]+>'关键字'.*?'],'match')
试试这个

%<td><a href="bla">(.*?)</a>%sg
%%sg

你的问题有点让人困惑。你要的是matlab解决方案还是PHP解决方案?如果是PHP,那么有比正则表达式更好的解析HTML的方法。我建议改为使用类似的方法。但是如果你正在寻找一个PHP解决方案的话。如果没有,请删除PHP标记。@MagnusEriksson我正在寻找一个matlab解决方案(m文件或matlab函数)。我之所以包含PHP,只是因为我了解matlab regexp类似于PHP,并且认为我可能会找到比matlab regexp背景更多的人使用PHP。另外,我玩的不是matlab,而是PHP。@MagnusEriksson我认为PHP模式在matlab中同样有效。你有权访问文本分析工具箱吗?如何返回包含所需关键字的行,关键字为“bla”?对不起,应该修改我的问题。基本上,bla etc(表中其他单元格和标记的内容)可以是任何内容-重要的部分是“findme”的存在,并且捕捉到一条线。谢谢,使用strsplit确实更简单。
%<td><a href="bla">(.*?)</a>%sg