java---带条件爬取,贪婪爬取和非贪婪爬取

一、给一段文本,爬取出所想要的信息

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

题目:需求1:爬取版本号为8,11,17的java文本,但是只要java,不显示版本号
         需求2:爬取版本号为8,11,17的java文本。正确爬取结果为:java8 java11 java17
         需求3:爬取除了版本号为8 11 17的java文本

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

public class RegexDemo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 需求1:爬取版本号为8,11,17的java文本,但是只要java,不显示版本号
		 需求2:爬取版本号为8,11,17的java文本。正确爬取结果为:java8 java11 java17
		 需求3:爬取除了版本号为8 11 17的java文本
		 */
		
		String str="java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和JAva11"+
		"因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台";
		
		//1.定义正则表达式
		//?理解为前面的数据java
		//=表示在java后面要跟随的数据
		//但是在获取的时候,只获取前半部分
		//需求1:
		String regex1="((?i)java)(?=8|11|17)";//为了区分要求中的java,我把java换成了不同的大写
		//需求2:
		String regex2="((?i)java)(8|11|17)";
		String regex3="((?i)java)(?:8|11|17)";
		//需求3:
		String regex4="((?i)java)(?!8|11|17)";//!表示除了8 11 17
		
		Pattern p=Pattern.compile(regex4);
		Matcher m=p.matcher(str);
		while(m.find()) {
			System.out.println(m.group());
		}

	}

}

 二:贪婪爬取和非贪婪爬取

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

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

public class RegexDemo3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		/*
		 
		 	只写+和*表示贪婪匹配
		 	+?非贪婪匹配
		 	*? 非贪婪匹配
		 	
		 	贪婪爬取:在爬取数据的时候尽可能多的爬取数据
		 	非贪婪爬取:在爬取数据的时候尽可能少的爬取数据
		 	
		 	ab+:
		 	贪婪爬取:abbbbbbbbbbb
		 	非贪婪爬取:ab
		 	
		 	java当中,默认的就是贪婪爬取
		 	如果我们在数量词+*的后面加上问号,那么此时就是非贪婪爬取
		 	
		 */
		String s="java自从95年问世以来abbbbbbbbbbbbaaaaaaaaa"
				+ ",经历了很多版本,目前企业中用的最多的是Java8和JAva11"+
				"因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台";
		
		
		String regex1="ab+?";
		
		Pattern p=Pattern.compile(regex1);
		Matcher m=p.matcher(s);
		while(m.find()) {
			System.out.println(m.group());
		}
	}

}

小练习:

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

public class RegexDemo4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		//public String replaceAll(String regex,String newStr)
		//public String[] split(String regex)
		/*
		 有一段字符串:小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠
		 要求1:把字符串中三个姓名之间的字母替换为VS
		 要求2:把字符串中的三个姓名切割出来
		 
		 */
		String s="小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";
		String result=s.replaceAll("[\\w&&[^_]]+", "VS");
		System.out.println(result);

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

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值