java常用API_正则表达式_在一段文本中查找满足要求的内容(爬虫)——练习及代码演示

news2024/11/25 7:14:44

练习一:

        根据下面这段文本,爬取所有的JavaXX

        Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台。

代码:
public class Test8 {
    public static void main(String[] args) {
        String str = "Java自从95年问世以来,经历了很多版本," +
                "目前企业中用的最多的是Java8和Java11," +
                "因为这两个是长期支持版本,下一个长期支持版本是Java17," +
                "相信在未来不久Java17也会逐渐登上历史舞台。";

        //创建正则表达式对象
        Pattern p = Pattern.compile("Java\\d{0,2}");

        //创建文本匹配器对象
        Matcher m = p.matcher(str);

        //利用循环获取
        while(m.find()) {
            String s = m.group();
            System.out.println(s);
        }
    }
}

注:m.find()会返回一个布尔类型的值,若找到符合正则表达式要求的内容,则会返回true,并且底层方法还会将指针指到该内容的第一个字符和最后一个字符的下一位,它每下一次执行如果返回true还会将指针再指向下一个符合正则表达式要求的内容,它指向符合要求的内容后,m.group()就可以截取指针指向的内容并返回一个字符串。

运行结果:

练习二:

        编写代码,将下面文本中的电话、邮箱、座机电话、热点电话都爬取出来

        在CSDN学习编程,
        电话:18888888000,18886666000
        联系邮箱:csdn@abc.cn
        座机电话:010-98745621,01025465485
        邮箱:csdn@abc.cn
        热线电话:400-342-4040,400-342-6060,4003424040,4003426060

代码:
public class Test9 {
    public static void main(String[] args) {
        String text = "在CSDN学习编程,\n" +
                "电话:18888888000,18886666000\n" +
                "联系邮箱:csdn@abc.cn\n" +
                "座机电话:010-98745621,01025465485\n" +
                "邮箱:csdn@abc.cn\n" +
                "热线电话:400-342-4040,400-342-6060,4003424040,4003426060";

        //电话的正则表达式
        String phoneRegex = "1[3-9]\\d{9}";
        //邮箱的正则表达式
        String emailRegex = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
        //座机电话的正则表达式
        String lanlineRegex = "0\\d{2,3}\\-?[1-9]{4,9}";
        //热线电话的正则表达式
        String hotPhoneRegex = "400-?[1-9]\\d{2}-?[1-9]\\d{3}";

        //整合全部正则表达式
        String regex = phoneRegex + "|" + emailRegex + "|" + lanlineRegex + "|" + hotPhoneRegex;

        //创建正则表达式对象
        Pattern p = Pattern.compile(regex);

        //创建文本匹配器对象
        Matcher m = p.matcher(text);

        //利用循环输出
        while(m.find()) {
            String str = m.group();
            System.out.println(str);
        }


    }
}
运行结果:

练习三:带条件爬取

编写代码按需求爬取下面这段文本:

        java自从95年问世以来,经历了很多版本,目前企业中使用最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会登上历史舞台。

需求1:爬取版本号为8,11,17的Java文本,但是只要Java不显示版本号,正确的输出 结果为:JavaJavaJavaJava。
需求2:爬取版本号为8,11,17的Java文本,正确爬取结果为:Java8Java11Java17Java17。
需求3:爬取除了版本号为8,11,17的Java文本,正确的输出结果为:java。

代码:
public class Test10 {
    public static void main(String[] args) {
        String str = "Java自从95年问世以来,经历了很多版本,目前企业中使用最多的是Java8和Java11," +
                "因为这两个是长期支持版本,下一个长期支持版本是Java17," +
                "相信在未来不久Java17也会登上历史舞台。";

        //需求1:爬取版本号为8,11,17的Java文本,但是只要Java不显示版本号
        //正确的输出 结果为:Java Java Java Java。
        System.out.println("------需求1------");
        //正则表达式为
        String regex1 = "Java(?=8|11|17)";//?可以理解为前面的Java,=表示在Java后面跟随的数据,最后获取的时候只获取前半部分
        //创建正则表达式对象
        Pattern p = Pattern.compile(regex1);
        //创建文本匹配器对象
        Matcher m = p.matcher(str);
        //利用循环输出结果
        while(m.find()) {
            String s = m.group();
            System.out.println(s);
        }

        //需求2:爬取版本号为8,11,17的Java文本
        //正确爬取结果为:Java8 Java11 Java17 Java17。
        System.out.println("------需求2------");
        //正则表达式为
        String regex2 = "Java(?:8|11|17)";//?可以理解为前面的Java,=表示在Java后面跟随的数据,最后获取的时候只获取前半部分
        //创建正则表达式对象
        p = Pattern.compile(regex2);
        //创建文本匹配器对象
        m = p.matcher(str);
        //利用循环输出结果
        while(m.find()) {
            String s = m.group();
            System.out.println(s);
        }

        //需求3:爬取除了版本号为8,11,17的Java文本
        //正确的输出结果为:Java。
        System.out.println("------需求3------");
        //正则表达式为
        String regex3 = "Java(?!8|11|17)";//?可以理解为前面的Java,=表示在Java后面跟随的数据,最后获取的时候只获取前半部分
        //创建正则表达式对象
        p = Pattern.compile(regex3);
        //创建文本匹配器对象
        m = p.matcher(str);
        //利用循环输出结果
        while(m.find()) {
            String s = m.group();
            System.out.println(s);
        }
    }
}
运行结果:

练习四:贪婪和非贪婪爬取

(前情提要:贪婪爬取是在爬取的时候尽可能的多获取数据,非贪婪爬取是尽可能的少获取数据,比如在abbbbbbbbbbaaaaaaaaaa中ab+贪婪爬取会得到abbbbbbbbbb,非贪婪爬取会得到ab,Java当中,默认是贪婪爬取,如果在数量词+ * 后加上问号 ? 那么此时就是非贪婪爬取)

编写代码按需求爬取下面这段文本:

        java自从95年问世以来,abbbbbbbbbbaaaaaaaaaa,经历了很多版本,目前企业中使用最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会登上历史舞台。

代码:
public class Test11 {
    public static void main(String[] args) {
        String str = " java自从95年问世以来,abbbbbbbbbbaaaaaaaaaa," +
                "经历了很多版本,目前企业中使用最多的是Java8和Java11," +
                "因为这两个是长期支持版本,下一个长期支持版本是Java17," +
                "相信在未来不久Java17也会登上历史舞台。";

        //贪婪爬取
        //编写正则表达式
        String regex1 = "ab+";
        //创建正则表达式对象
        Pattern p = Pattern.compile(regex1);
        //创建文本匹配器对象
        Matcher m = p.matcher(str);
        //利用循环输出结果
        while(m.find()) {
            String s = m.group();
            System.out.println("贪婪爬取结果:" + s);
        }

        //非贪婪爬取
        //编写正则表达式
        String regex2 = "ab+?";
        //创建正则表达式对象
        p = Pattern.compile(regex2);
        //创建文本匹配器对象
        m = p.matcher(str);
        //利用循环输出结果
        while(m.find()) {
            String s = m.group();
            System.out.println("非贪婪爬取结果:" + s);
        }
    }
}
运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序的苏州博物馆文创产品售卖系统

前言 基于小程序的苏州博物馆文创产品售卖系统的设计与实现能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知基于小程序的苏州博物馆文创产品售卖系统的设计与实现的便捷高效,不仅为群众提供了服务,而且也推广了自己&#…

【C++11】initializer_list | 右值引用 | 完美转发

一切皆可列表{ }初始化 在C98,允许花括号{ } 对数组、结构体类型初始化。 class Data { public:Data(int y, int m, int d):_y(y), _m(m), _d(d){} private:int _y;int _m;int _d; };int arr[4]{0,1,2,3};//列表初始化 Data d1{2024,03,21};//列表初始化 C11允许通过{ } 初始化…

基于ADS的PDK---DemoKit的切比雪夫滤波器RF芯片设计

基于ADS的PDK—DemoKit的切比雪夫滤波器RF芯片设计 由于版权原因,很少有完整的ADS的PDK在网上流传的,网上CSDN里面一些台积电的PDK都是只能老版本ADS2008才能用,或者干脆是Cadence导出来的(Cadence导出PDK到ADS参考教程&#xff…

PPT 操作

WPS 版式 PPT中,巧妙使用母版,可以提高效率。 双击母版,选择其中一个版式,插入装饰符号。 然后选择关闭。 这个时候,在该版式下的所有页面,就会出现新加入的符号。不在该版式下的页面,不会出现…

飞桨Ai(一)基于训练后的模型进行信息提取

基准 本博客基于如下视频: 发票抬头信息抽取之环境搭建 - 基于飞浆开源项目发票抬头信息抽取之数据标准模型训练 - 基于飞浆开源项目 步骤 1、准备工作 下载python:【Python】Windows:Python 3.9.2 下载和安装(建议3.9&#…

QDateTimeEdit设置按钮宽度无效

在对QDateTimeEdit组件的小按钮用qss样式加图标的时候,发现设置的宽度无效,原因是spacing属性必须设置才行。

【MATLAB源码-第29期】基于matlab的MIMO,MISO,SIMO,SISO瑞利rayleigh信道容量对比。

操作环境: MATLAB 2022a 1、算法描述 1. SISO(单输入单输出): - SISO 是指在通信系统中,只有一个天线用于传输信号,也只有一个天线用于接收信号的情况。这是最简单的通信方式。 2. SIMO(单…

回归预测 | MATLAB实现BO-GRNN贝叶斯优化广义回归神经网络多输入单输出预测

回归预测 | MATLAB实现BO-GRNN贝叶斯优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现BO-GRNN贝叶斯优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 基本介绍

C++奇迹之旅:探索类对象模型内存的存储猜想

文章目录 📝前言🌠 类的实例化🌉类对象模型 🌠 如何计算类对象的大小🌉类对象的存储方式猜想🌠猜想一:对象中包含类的各个成员🌉猜想二:代码只保存一份,在对象…

韩顺平Java | C24 MySQL数据库(下)

※多表查询 笛卡尔集:查询两个表,默认无条件情况下,取出第一张表中的每一条记录和第二张表的每一条记录进行组合,返回row1*row2条记录数,包含两张表的所有列 内连接 # 写出正确的过滤条件:多表查询条件不…

【linux】yum 和 vim

yum 和 vim 1. Linux 软件包管理器 yum1.1 什么是软件包1.2 查看软件包1.3 如何安装软件1.4 如何卸载软件1.5 关于 rzsz 2. Linux编辑器-vim使用2.1 vim的基本概念2.2 vim的基本操作2.3 vim命令模式命令集2.4 vim底行模式命令集2.5 vim操作总结补充:vim下批量化注释…

9. 软件登陆界面-2

窗口组件 1.组件的属性 组件的位置 组件的可视 2.组件的事件 窗口_创建完毕 窗口_托盘事件;带有参数的事件的使用方法。 3.组件的方法 置托盘图标 销毁() 编辑框组件 1.编辑框的属性 内容 是否允许多行 输入方式 密码遮盖字符…

单链表专题

文章目录 目录1. 链表的概念及结构2. 实现单链表2.1 链表的打印2.2 链表的尾插2.3 链表的头插2.4 链表的尾删2.5 链表的头删2.6 查找2.7 在指定位置之前插入数据2.8 在指定位置之后插入数据2.9 删除pos节点2.10 删除pos之后的节点2.11 销毁链表 3. 链表的分类 目录 链表的概念…

【Linux】初识Linux操作系统

目录 一、shell 二、Linux命令的分类 三、Linux命令的格式 四、编辑Linux命令行的辅助操作 五、查看命令使用说明的方法 六、基础命令 一、shell ●Linux系统中运行的一个特殊程序,位于用户与内核之间 ●作用:作为“翻译官”,接收用户…

基于Java+SpringBoot+Vue网络相册设计与实现(源码+文档+部署+讲解)

一.系统概述 网络相册设计与实现的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起…

C++ 类和对象(中篇)

类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。 构造函数: 定义:构造函数是一个特殊的成员…

【PHP系统学习】——Laravel框架数据库的连接以及数据库的增删改查的详细教程

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

【招贤纳士】长期有效

【招贤纳士】长期有效,有意者联系 一、SLAM算法工程师工作内容:任职资格: 二、规划算法工程师工作内容:任职资格: 工作地点:深圳南山 公司行业:家用扫地机器人 待遇从优,有机器人比赛…

CAD导入GIS平台常见问题大全

1.CAD导入图新地球报【坐标超出范围】、【导入失败】 一般是投影不对,多数是中央经线选错了,或者是没注意是否有带号 这种情况,先打开CAD软件,通过id命令看一下数据的坐标,如下图 看到坐标是这样式的,X达…

达梦数据库审计相关参数

达梦数据库审计相关参数 基础环境 操作系统:Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本:DM Database Server 64 V8 架构:单实例1 查看审计相关的参数 查看AUD相关的参数。 1.1 查看dm.ini配置文件。 在dm.ini配置文…