对正则表达式来说很新,并没有找到一个描述性的解释来缩小我对正则表达式的理解,以便让我找到解决方案。
我使用一个脚本从雅虎财务中删除html脚本以获取财务选项表数据。雅虎最近更改了他们的HTML代码,旧算法不再有效。旧表达如下:
Main_Pattern = '.*?</table><table[^>]*>(.*?)</table';
Tables = regexp(urlText, Main_Pattern, 'tokens');
Tables
用于返回数据的位置,不再存在。对HTML的HTML检查告诉我,数据不再在<table>
中,而是在<tbody>
...
我的问题是“Main_Pattern
正则表达式在外行人的意义上是什么意思?”我正试图想出如何修改该表达式,使其适用于当前的HTML。
答案 0 :(得分:1)
虽然我同意@Marcin和正则表达式最好通过做和利用the reference of your chosen tool来学习,但我会尝试分解其正在做的事情。
.*?</table>
:匹配第一个</table>
文字的所有内容(由于?
,这是一个懒惰的表达式。)
<table
:匹配此字面值。
[^>]*>
:尽可能匹配从>
字面值到最后一次出现的满足<table
>
的{{1}} ?
*
其余的表达式(这是一个贪婪的表达式,因为(.*?)</table
之后没有>
。
</table
:匹配并捕获上一部分'tokens'
到regexp
字面之间的任何内容;可以使用'match'
的{{1}}选项检索捕获的内容(您还可以使用{{1}}选项获取匹配的整个字符串。)
虽然我把它分成了碎片,但我想强调整个表达本身就是一个整体,这就是为什么有些部分引用了前面的部分。
有关上述内容的更深入说明,请参阅MATLAB文档的Operators and Characters部分。
对于未来,更强大的选项可能是使用MATLAB的xmlread
和DOM对象来遍历表节点。
我确实理解这是要学习的另一个 API,但对于未来可能更易于维护。