加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

像Perl或Python中的lex一样模拟功能

发布时间:2020-12-15 23:31:05 所属栏目:大数据 来源:网络整理
导读:这是交易.有没有办法让基于多个正则表达式的行中的字符串标记? 一个例子: 我必须根据不同的正则表达式获取所有href标签,相应的文本和其他一些文本. 所以我有3个表达式,并且想要对行进行标记并提取与每个表达式匹配的文本标记. 我实际上是使用flex完成的(不
这是交易.有没有办法让基于多个正则表达式的行中的字符串标记?

一个例子:

我必须根据不同的正则表达式获取所有href标签,相应的文本和其他一些文本.
所以我有3个表达式,并且想要对行进行标记并提取与每个表达式匹配的文本标记.

我实际上是使用flex完成的(不要与Adobe混淆),这是一个很好的老lex的实现. lex提供
通过基于表达式执行“动作”来实现此目的的优雅方式.人们可以控制方式
lex也读取文件(基于块/行的读取).

问题是flex实际上产生的C/C++代码实际上是标记化工作.我有一个
制作包装所有这些东西的文件.
我想知道perl / python是否能以某种方式做同样的事情.它就是我想做的一切
我喜欢用一种编程语言本身.

令牌化只是我想要在我的应用程序中执行的操作之一.

除了perl或python之外,任何语言(功能也可以)都可以这样做吗?

我在这里读过PLY和ANTLR(Parsing,where can I learn about it).

但有没有办法在python本身自然地做到这一点?请原谅我的无知,但这些工具是否适用于任何受欢迎的产品/服务?

谢谢.

解决方法

如果你专门解析了网页中的链接,那么Perl的 WWW::Mechanize模块将以非常优雅的方式为你解决问题.这是一个示例程序,它抓取Stack Overflow的第一页并解析所有链接,打印其文本和相应的URL:

#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new;

$mech->get("https://stackoverflow.com/");

$mech->success or die "Oh no! Couldn't fetch stackoverflow.com";

foreach my $link ($mech->links) {
    print "* [",$link->text,"] points to ",$link->url,"n";
}

在主循环中,每个$link都是一个WWW::Mechanize::Link对象,因此您不仅限于获取文本和URL.

祝一切顺利,

保罗

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读