对正则表达式非常陌生,还没有找到描述性的解释来缩小我对正则表达式的理解,从而无法找到解决方案。
我使用了一个脚本,该脚本从Yahoo财务中抓取了html脚本,以获取财务期权表数据。雅虎最近更改了他们的HTML代码,旧算法不再起作用。旧的表达如下:
Main_Pattern = '.*?</table><table[^>]*>(.*?)</table';
Tables = regexp(urlText, Main_Pattern, 'tokens');
凡Tables
用于返回数据,它不再一样。对HTML进行HTML检查后,我发现数据不再位于中<table>
,而是位于<tbody>
...中。
我的问题是“Main_Pattern
正则表达式对外行而言意味着什么?” 我试图弄清楚如何修改适用于当前HTML的表达式。
我同意@Marcin的观点,并且通过使用和利用所选工具的参考可以最好地学习正则表达式,但我将尽力弄清它的作用。
.*?</table>
:匹配不超过第一个</table>
文字的任何内容(由于,这是一个惰性表达式?
)。
<table
:匹配此文字。
[^>]*>
:尽可能匹配不是>
从<table
字面量到>
满足表达式其余部分的a的最后一次出现(这是Greedy表达式,因为?
后面没有*
)之间的匹配。
(.*?)</table
:匹配并捕获>
从上一部分到</table
文字之间的所有内容;捕获的内容可以使用的'tokens'
选项进行检索regexp
(您也可以使用该选项获取匹配的整个字符串'match'
)。
当我将它分解成几部分时,我想强调一下,整个表达式本身就是一个整体,这就是为什么某些部分引用前面的部分的原因。
有关上述内容的详细说明,请参见MATLAB文档的“运算符和字符”部分。
将来,更健壮的选择可能是使用MATLABxmlread
和DOM对象遍历表节点。我确实知道这是另一个需要学习的API,但将来可能会更易于维护。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句