黑马程序员——正则表达式(1)

cut&tag学习笔记 上图是我得到的结果,下图是教程的结果,比对结果有一些差异,我也不知道具体原因是啥。谷歌了一下,发现原因可能是因为环境变量的问题,系统不知道picard的具体位置,需要设置全局环境变量,遂查了一下picard的位置。我发现我做出来的结果测序深度一致,但是比对的结果有一点差异,不知道是我的操作问题,还是参考基因组更新了导致比对结果出现了些许不同。上图是我得到的结果,下图是教程的结果,除了IgG_rep1外比对结果一致。上图是我的结果,下图是教程的结果,结果不太一致,不知道是具体的原因是什么。 阅读详情
------- android培训java培训、期待与您交流! ----------
/**使用正则表达式的基本方法:
(一)建立
String regex="";//regex匹配
String input="";//input输入

Pattern p= Pattern.compile(regex);//将给定的正则表达式(regex)编译compile()到模式(Pattern)中。 static Pattern	compile(String regex)      
Matcher m=p.matcher(input);//创建匹配(match)给定输入(input)与此模式的匹配器(Matcher)。 Matcher	matcher(CharSequence input)

(二)处理匹配结果
//如果是用regex匹配全部input则使用。尝试将整个区域与模式匹配:boolean	matches()   
m.matches()
//通常只需要匹配部分input,则使用m.find() 尝试查找与该模式匹配的输入序列的下一个子序列:boolean	find([int start]) 
//抛出:IndexOutOfBoundsException - 如果开始点小于零或大于输入序列的长度。
  int tmpStart=0
  while(m.find())
  {
  	//...
  	tmpStart=m.end();//end()返回的是当前与模式匹配的子序列的结尾的位置。
  }
 
 (三)关于捕获
 regex中()表示需要捕获的群组,匹配后,得到一个数组存放所有的捕获。
 返回此匹配器模式中的捕获组数:int	groupCount()//捕获是从1开始计算,0始终表示整个regex,所以想返回整个匹配的子序列可以用m.group()。
 返回由以前匹配操作所匹配的输入子序列: String	group()           
 
 for(int i=0;i<=m.groupCount();++i)//i=0表示m.group(0)即整个regex的匹配
 {
 	System.out.print(m.group(i));
 	System.out.print(" ,starts at pos:"+m.start(i));
 	System.out.print(" ,ends at pos:"+m.end(i));
 	System.out.println();
 }
      
(四)替换
1.替换模式与给定替换字符串相匹配的输入序列的每个子序列。String	replaceAll(String replacement) 
    m.replaceAll("#");//input的所有与regex匹配的子序列都被替换成"#";
2.替换模式与给定替换字符串匹配的输入序列的第一个子序列。String	replaceFirst(String replacement) 
    m.replaceFirst("#");//input第一个与regex匹配的子序列被替换成"#";
3.用捕获的内容进行替换
	m.replaceFirst("$1");//用第一个捕获的内容替换整个与regex匹配的子序列。	
	
	String forMatch="15851844444aasdddd15851866666ddd15851822222ddd15851899999";//ddd15851877777
	String regex="1[3458]\\d{4}(\\d)\\1{4}";
	Pattern p=Pattern.compile(regex);		
	Matcher m=p.matcher(forMatch);
	
	int tmpStart=0;
	int cntMatches=0;
	while(m.find(tmpStart))
	{			
		tmpStart=m.end();
		System.out.println("matches "+(++cntMatches)+" : ");
		for(int i=0;i<=m.groupCount();++i)
		{
			System.out.print("match "+i+" : ");
			System.out.print(m.group(i));
		 	System.out.print(" ,starts at pos:"+m.start(i));
		 	System.out.print(" ,ends at pos:"+m.end(i));
		 	System.out.println();
		}
		System.out.println();
	}
*/
/**
练习题: 写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666

@author rexih
0.首先根据题目要求制作一个随机文本文件,文件内有字母和手机号码
a.创建一个手机号码生成器
规则: 第1位是1,第二位可以是数字3458其中之一,后面9位任意数字。
b.将号码随机插入到随机字母文本中。

1.建立一个ArrayList<String>存储捕获到的手机号码,建立一个字符缓冲区sb存放将作为输入的字符序列;
2.读取文件的内容 src:文件 FileInputStream //dest:屏幕
3.通过read(buf)方法读取输入流的字节数据,并将读取到的字节数据附加到字符缓冲区末尾
4.将sb转换成输入input
5.编写regex
6.将regex编译进模式Pattern
7.获取匹配器Matcher m
8.通过m的find()方法寻找每一个匹配,并通过group()获取符合要求的电话号码
9.将电话号码的字符串存入ArrayList<String>
10.打印集合中的所有电话号码。
*/
import java.io.*;
import java.util.regex.*;
import java.util.*;
public class Test
{
	public static void main(String[] args) //throws Exception
	{			
		ArrayList<String> al=new ArrayList<String>();
		InputStream in=null;		
		byte[] buf=new byte[1024];
		int cntBuf=0;
		StringBuilder sb=new StringBuilder();
		//生成一个用于演示的文本文件
		File f=buildAFile();
		try 
		{
			//读取文件的内容 src:文件 FileInputStream 
			in=new FileInputStream(f);
			//通过read(buf)方法读取输入流的字节数据
			while(-1!=(cntBuf=in.read(buf)))
			{
				//将读取到的字节数据附加到字符缓冲区末尾
				sb.append(new String(buf,0,cntBuf));
			}			
		} catch (IOException e) 
		{
			throw new RuntimeException("read file failed");
		}
		finally
		{
			//关闭输入流
			if(null!=in)
			{
				try 
				{
					in.close();
				} catch (IOException e) 
				{
					throw new RuntimeException("input close failed");
				}				
			}	
		}	
	
		//准备好正则表达式使用的输入
		String input=sb.toString();
		/*准备好正则表达式:
		按照题目要求:
		第一位为 1			1
		第二位为3458之一		[3458]
		中间4位任意			\d{4}
		后5位相同			(\d)\1{4}	//(\d)表示将这个数字捕获因为5个数字相同,所以该数字之后4个数字应该与之相同,即与\1相同,也就是\1{4}
		*/
		String regex="1[3458]\\d{4}(\\d)\\1{4}";
		//将正则表达式编译进模式
		Pattern p=Pattern.compile(regex);
		//获取输入和模式的匹配器m
		Matcher m=p.matcher(input);
		
		//获取下一次匹配的起始位置(上次匹配结果的末尾)
		int tmpStart=0;
		//因为号码不止一个所以需要多次匹配以获取所有号码
		while(m.find(tmpStart))
		{			
			tmpStart=m.end();//获取下一次匹配的起始位置(上次匹配结果的末尾)
			newPrint("get a phone number: "+m.group());//m.group()获取本次匹配的子序列。
			al.add(m.group());//添加入“电话本”
		}
		newPrint("All  the cell phone numbers stored in ArrayList:");
		int cnt=0;
		for(String s:al)
		{
			newPrint((++cnt)+":\t"+s);
		}
		newPrint("The orginal file is saved at:\n"+f.getAbsolutePath());	
	}
	//生成一个文件
	public static File buildAFile()
	{		
		//创建一个File对象用于保存文件,并且返回给主函数调用。
		File f=new File("regex.txt");
		FileOutputStream fout=null;
		try 
		{
			//dest是文件,使用FileOutputStream
			fout=new FileOutputStream(f);
			
			writeContent(fout);//向文件写入内容			
		} catch (IOException e) 
		{
			throw new RuntimeException("builing a file failed");
		}
		finally
		{
			//关闭资源
			if(null!=fout)				
			{
				try
				{
					fout.close();
				} catch (IOException e) 
				{
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}			
			}
		}
		return f;
	}	
	//向输出流写入内容
	public static void writeContent(OutputStream out)throws IOException//异常返回给invoker处理
	{
		int offset=0;
		for(int i=0;i<100;++i)
		{
			//每一百个字母中随机选择一个位置,随机判断是否用电话号码替代掉,概率为1/10
			offset=getRand(0,99);
			for(int j=0;j<offset;++j)
			{
				out.write(getRandAlphabet());
			}
			//判断该字符是否用电话号码替代掉,概率为1/10
			if(5==getRand(0,10))
			{
				out.write(phoneNumGen());
			}else
			{
				out.write(getRandAlphabet());
			}
			
			for(int j=offset+1;j<100;++j)
			{
				out.write(getRandAlphabet());
			}
		}
	}
	//使用Math类的random()方法获取[0.0,1.0)的随机数乘以length+begin再取整则可以得到[begin,begin+length)的整数
	public static int getRand(int begin,int length)
	{		
		return (int)(Math.random()*length+begin);
	}	
	//随机获取一个小写字母a的ascii为97,一共有26个字母
	public static char getRandAlphabet()
	{		
		return (char)getRand(97,26);		
	}
	//创建一个手机号码生成器。规则: 第1位是1,第二位可以是数字3458其中之一,后面9位任意数字。
	public static byte[] phoneNumGen()
	{
		//48是0的ascii码
		final int ZERO=48;
		//为了方便字节流输出数据,将返回值定义为byte[]
		byte[] phoneNum=new byte[11];
		//step1:第一位为1
		phoneNum[0]=(byte)(1+ZERO);		
		//step2:随机获取第二位的数字
		switch(getRand(1,4))
		{
		case 1:
			phoneNum[1]=(byte)(3+ZERO);
			break;
		case 2:
			phoneNum[1]=(byte)(4+ZERO);
			break;
		case 3:
			phoneNum[1]=(byte)(5+ZERO);
			break;
		case 4:
			phoneNum[1]=(byte)(8+ZERO);
			break;
		}
		//step3:随机写入中间4位
		for(int i=2;i<6;++i)
		{
			phoneNum[i]=(byte)getRand(ZERO,10);
		}		
		//step4:为了让程序结果更能说明问题,先生成一个随机数,若是0则后五位随机,若是1则后五位相同
		if(0==getRand(0,2))
		{
			for(int i=6;i<11;++i)
			{
				phoneNum[i]=(byte)getRand(ZERO,10);
			}
		}
		else
		{
			byte tmp=(byte)getRand(ZERO,10);
			for(int i=6;i<11;++i)
			{
				phoneNum[i]=tmp;
			}
		}
		return phoneNum;
	}
	//简化书写,打印简单的信息。
	public static void newPrint(Object obj)
	{		
		System.out.println(obj);
	}
	
}


6.14华为OD机试真题 新系统 - 字符串格式调整 (Java/Py/C/C++/Js/Go) # **字符串格式调整** > 2026 华为OD机试真题 6月14日华为OD上机新系统考试真题 100 分题型 点击查看华为 OD 机试真题完整目录:[2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解](https://blog.csdn.net/banxia_frontend/article/details/160346662) # 题目描述 输入一个字符串,字符串中只包含大写字母和数字。要求将字符串中的所有数字提取出来,按出现的顺序组 阅读详情

相关推荐

毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明

毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行!毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业设计-基于STM32单片机的心率血氧监测系统的设计源码+文档说明毕业

根据规则自动生成正则表达式

代表大写字母,*代表数字,%代表通配任意数字或大写字母仅限首尾,$代表任意数字或大写字母 (提示%号不能相邻,不能有两个百分号,只能在首尾,只能是大小写,提示范围必须后面大于前面,个位数必须补足位数输入)主要思路:遍历,判断 找范围正则验证规律例如(1-800)(001-800)(001-006)写递归。以及范围验证生成正则表达式是,位数要一样,后面要比前面大,双范围等等。(自己建的页面,控件命名还未改)截图截不下了,直接复制代码吧。初始是这样写的,但是后面发现很不严谨,范围有很大的问题。

guocs415的博客 2557

使用正则表达式生成随机数据的方法

主要介绍了使用正则表达式生成随机数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

正则表达式基础 Regular Expression

正则表达式基础 Regular Expression 正则表达式简介 n 为什么需要正则表达式? q 文本的复杂处理。 n 正则表达式的优势和用途? q 一种强大而灵活的文本处理工具; q 提供了一种紧凑的、动态的方式,能够以一种完全通用的方式来解决各种字符串处理(例如:验证、查找、替换等)问题; q 大部分语言[d1]、数据库都支持正则表达式。 n 正则表达式定义: q 正...

tansitongba 583

正则表达式学习笔记

正则表达式学习笔记。

1853 1386

【校验】校验实例

检验

sh1307212321的博客 156

黑马程序员——正则表达式1:概述

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1  正则表达式简介 1.1  正则表达式的概念        正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能够随心所欲地对它们进行处理了(摘自《Java编程思想

axr1985lazy的专栏 415

黑马程序员 正则表达式1 匹配和切割

---------------------- ASP.Net+Android+IO开发S、<a target="blank">.Net培训、期待与您交流! ----------------------

伤痛是落叶的专栏 523

黑马程序员-java专题系列之1-正则表达式

------- android培训、java培训、期待与您交流! ---------- java正则表达式 使用正则表达式可以方便的对数据进行匹配,还可以实现更加复杂的字符串验证,例如拆分,替换,获取,验证这些功能,假如,现在要求判断一个数字是否是全部由数字组成,可以有下面 两种做法 例1(不使用正则表达式) import java.util.regex.*; public

vmvm555的专栏 718

黑马程序员_正则表达式学习笔记(1

正则表达式学习笔记(1) ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 详细请看这位大神的《正则表达式30分钟入门教程》 (学习正则表达式之前必须有个好的工具,我使用的是Regulator.exe) 一、学习正则的时候不必都记住某个元字符具体的意思,但是必须知道都有那些功...

weixin_30394669的博客 114

正则表达式提取器

创建首先自定义名称,随后正则表达式所提取的公式,$1$表示第一个括号中的内容,最后的1表示第一个数据(0表示随机),最后表示如果返回的为空,则返回这个数值。使用效果,以黑马程序员官网主页为例运行结果一切都很顺利,但是过程中也有着各种问题。

m0_73755884的博客 516

黑马程序员——Java基础:反射、JDK1.5新特性、正则表达式

注:前面所有总结都是通过毕向东老师所讲的视频所得。反射部分由张孝祥老师所讲。 一、反射 反射 :是指程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。反射就是得到元数据的行为。 反射的基础是Class类: Class类:Java程序中的各个Java类属于同一类事物,描述这类事物的Java类就是Class类。 如:人——> Person //Person类代表人,它的实例对象就是张三

u012770105的博客 754

(七)黑马程序员——正则表达式

------- android培训、 java培训、期待与您交流! ---------- 正则表达式 * 是指一个系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。 作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的 正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不

qq_33609664的博客 484

黑马程序员——Java基础---正则表达式

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------  正则表达式 一、概述         1、 概念:符合一定规则的表达式。         2、 作用:用于专门操作字符串。         3、 特点:用于一些特定的符号来表示一些代码操作,这样可以简化书写。所以学习正则表达式,就是在学习一些特殊符

wuguyu的专栏 385

python爬虫-采集黑马程序员论坛的帖子

通过浏览器搜索黑马程序员论坛(http://bbs.itheima.com/forum-644-6.html),打开Python+人工智能技术交流板块页面(https://bbs.itheima.com/forum-425-1.html),每个帖子都以相同的布局方式显示了详细的信息,包括文章标题、发布时间、文章作者等。通过爬虫技术采集文章的标题、文章的链接、文章作者和发布时间。

3701

根据正则表达式生成随机字符串

最近做个项目需要生成大量测试数据,其中涉及到中文名字和中国大陆的身份证号码,原来是自己根据百家姓和我国身份证号各个字段的含义用SQL语句拼出来的,后来想想若是能根据正则表达式生成随机字符串,那就太好了,网上搜了下,有篇《SQL Server 生成测试数据的文章》是利用VS2010的数据库项目中有个生成数据的向导,试了下,果然还可以,但不太成熟,只支持一些简单的正则表达式,且还很容易出现乱码,生成中

baijunzhen的专栏 8316

通过正则表达式生成满足条件的随机数据

通常情况下,我们都是拿正则表达式去验证一个字符串是否符合要求,但有时候我们需要生成一些符合一定规则的数据的时候,我们也可以使用正则,今天我要给大家详细讲解下如何生成, 首先,我们需要一个工具,链接如下 http://download.csdn.net/detail/x359981514/7070319 进入CMD运行该程序: 参数很清楚,相信大家不用我翻译了 使用如下:  

eclipse_xu 6767

如何加减单元格指定数字_excel生成6位随机数字

我们还是使用RANDBETWEEN()函数来设置怎么生成6位随机数字,利用它的特性,即生成指定区域内的整数随机数。那么6位数最小的数字是100000,6位数最大的数字是999999,那么这个函数就可以写为:=RANDBETWEEN(100000,999999)。我以实例给大家来说一下。1、点插入函数,下图的红圈,除了新入门的朋友之外 ,大家应该都知道吧,这句就是写给新手朋友的,较懂的请直接向下看。...

weixin_39688875的博客 637

java随机生成8-20位密码-包括数字、大小写字母、特殊符号。

int i = (int)(8+Math.random()*(20-8+1)) ; String pd=this.getRandomPassword(i); public String getRandomPassword(int len) { String result = null; while(len>=6){ result ...

aixiasu5519的博客 4954

正则表达式匹配手机号码 写一个正则表达式,可以匹配尾号5连的手机号。规则:1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。...

1[3458]\d{4}(\d)\1{3} 1 匹配 1 [3458] 匹配 3 4 5 8 任意一个 \d{4} 匹配 4个0-9 (\d) 匹配 0-9并捕获到\1 \1{4} 匹配 4个之前捕获到的\1 public class Test9 { /** * 写一个正则表达式,可以匹配尾号5连的手机号。规则:1位是1,第二位可以是数字3458其中...

dieshengla2331的博客 1524

数字范围正则表达式

软件开发中,需要限制编辑框的数字范围,网上搜了一些,要么漏洞很多,要么不完善,于是博主重新学了一些正则表达式的语法。不多废话,请看正题: 1、[0,255]范围内的正则表达式: ^[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|(25[0-5])$ 解析:这个范围IP地址中会用到,如果写成^[0-2][0-5]{2}$那就大错特错了,不仅会取000这样无意义的数值,还不能输入39、166等数字。 上述表达式虽长,但是分段看就很简单,将其分成5个区间: 取值范围

宏笋的博客 9443
上一篇: 黑马程序员——正则表达式(2)自制模糊查询
下一篇: BigDecimal类——解决double精度丢失
rexih
博客等级 码龄12年 0粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值