当前位置: 首页 > article >正文

正则表达式实现带有条件的爬取

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


需求1:爬取版本号为8,11.17的Java文本,但是只要Java,不显示版本号。
需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17
需求3:爬取除了版本号为8,11.17的Java文本,
public class MyTest {
    public static void main(String[] args) {

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

        //1.定义正则表达式
        //?理解为前面的数据Java
        //=表示在Java后面要跟随的数据
        //但是在获取的时候,只获取前半部分
        //需求1:
        String regex1 = "((?i)Java)(?=8|11|17)";
        //需求2:
        String regex2 = "((?i)Java)(8|11|17)";
        String regex3 = "((?i)Java)(?:8|11|17)";
        //需求3:
        String regex4 = "((?i)Java)(?!8|11|17)";

        Pattern p = Pattern.compile(regex4);
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

 

        /*
            只写+和*表示贪婪匹配

            +? 非贪婪匹配
            *? 非贪婪匹配

            贪婪爬取:在爬取数据的时候尽可能的多获取数据
            非贪婪爬取:在爬取数据的时候尽可能的少获取数据

            ab+:
            贪婪爬取:abbbbbbbbbbbb
            非贪婪爬取:ab
        */

package com.itheima.a08regexdemo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo10 {
    public static void main(String[] args) {

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

        String regex = "ab+";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);

        while (m.find()) {
            System.out.println(m.group());
        }


    }
}

正则表达式在字符串方法中的使用

 

 

package com.itheima.a08regexdemo;

public class RegexDemo11 {
    public static void main(String[] args) {
        //public string replaceAll(string regex,string newstr) 按照正则表达式的规则进行替换
        //public string[] split(string regex): 按照正则表达式的规则切割字符串

        /*
            有一段字符串:小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠
            要求1:把字符串中三个姓名之间的字母替换为vs
            要求2:把字符串中的三个姓名切割出来*/

        String s = "小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";
        //细节:
        //方法在底层跟之前一样也会创建文本解析器的对象
        //然后从头开始去读取字符串中的内容,只要有满足的,那么就用第一个参数去替换。
        String result1 = s.replaceAll("[\\w&&[^_]]+", "vs");
        System.out.println(result1);

        String[] arr = s.split("[\\w&&[^_]]+");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}

http://www.kler.cn/a/288837.html

相关文章:

  • java模拟键盘实现selenium上下左右键 table中的左右滚动条实现滚动
  • 在 Ubuntu 上安装 `.deb` 软件包有几种方法
  • ubuntu ros 解决建完图后 保存的地图非常小的问题
  • FreeRTOS学习13——任务相关API函数
  • zabbix监控端界面时间与服务器时间不对应
  • Qt 获取当前系统中连接的所有USB设备的信息 libudev版
  • 动态规划-最大子数组和
  • [解决]Prometheus 与 Grafana进行组合,但是不显示数据与图像
  • 【王树森】Transformer模型(1/2): 剥离RNN,保留Attention(个人向笔记)
  • Java开发学习Kotlin 笔记
  • 每天学习一个基础算法之插入排序
  • 谷歌地图广告指南
  • P1438 无聊的数列
  • React 实现PDF预览(数据源使用文件流而不是url)
  • 哪些好用的待办事项清单值得推荐:待办任务清单app
  • (二十八)STL set(集合)
  • 前端vue中怎么判断接口请求返回的时长
  • 【量化交易的数学基础】文科生也能搞懂的线性代数基础:矩阵和向量的那些事儿
  • 学习日志29
  • 【IT工具】Windows下XMind安装教程【不要米】及常用快捷键
  • 翻译_Clock Domain Crossing Design
  • 【RSA】简单说说什么是RSA非对称加密
  • C++封装:栈、队列
  • Vue.js 模板语法详解:插值表达式与指令使用指南
  • 企业微信hook协议接口,聚合群聊客户管理工具开发
  • 有关Prompt Engineering(提示词工程)的一些总结