黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法

------- android培训java培训、期待与您交流!----------


      正则表达式的出现是为了使程序员能够更加简便的操作字符串,就是一种事先规定好的规则,它的优点在于代码简洁,它通过一些特定的符号来体现,但是阅读性变差了.

例如:String Regex = "[0-9 ]";

1.正则表达式需要记住的特定符号所代表的含义,只有记住了这些才能熟练地使用正则表达式。

1.1 字符   

 \\反斜线字符             前一个\代表转义

1.2 字符类(最常用的)

[abc]abc(简单类)
[^abc]任何字符,除了 abc(否定)
[a-zA-Z]azAZ,两头的字母包括在内(范围)
[a-d[m-p]]admp[a-dm-p](并集)
[a-z&&[def]]def(交集)
[a-z&&[^bc]]az,除了 bc[ad-z](减去)
[a-z&&[^m-p]]az,而非 mp[a-lq-z](减去)

1.3 预定义字符类

.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]

1.4 Greedy 数量词

X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n
X{n,}X,至少 n
X{n,m}X,至少 n 次,但是不超过 m

2. 正则表达式的分组概念

  ( )就是正则表达式中的封装格式,称之为组,每个组都有编号,默认编号从1开始。

  它的使用是通过 "\\组的编号来使用的"。

  例如,正则表达式中(.)表示将任意一个字符封装成组或者说是一个对象,字符串中\\1就是对这个对象的复用1   次,注意的是这里的1代表的是组的编号而不是复用次数,想要复用多次可以写作\\1+.

		String str = "abcdddeffgggghhhhh";
		String regex1 =  ".";   	   //"."和(.)代表的意思是相同的
		String regex2 = "(.)\\1";	   // 复用了1次
		String regex3 = "(.)\\1+";	   //复用了1次或多次
		String[] strs1 = str.split(regex1);//全被切割了所以没内容
		String[] strs2 = str.split(regex2);//相当于按照两个相同字符来切割的,打印结果abcdeh
		String[] strs3 = str.split(regex3);//按至少2个相同的字符打印,打印结果abce

3. 正则表达式的4中常用操作
3.1 匹配

      其实使用的就是String类中的matches(String regex)方法,regex为正则表达式,如果匹配规则就返回true。

      返回值为String类型。

      如检验手机号是否正确,要求位数为11位,第一位必须是1,第二位为3、5、8中的其中一个,后9位只要是数字 就可以。

	String telNum1 = "13855555501";
	String telNum2 = "05855555501";
	String telNum3 = "138555555018000000";
		
	String regex = "1[358][0-9]{9}";//规定规则,意义对应:1--第一位为1;[358]第二位为358之一
		                                 // [0-9]{9}连续校验9次,为数字即可。
		
	boolean b1 = telNum1.matches(regex);//返回true
	boolean b2 = telNum2.matches(regex);//返回false
	boolean b3= telNum3.matches(regex);//返回false

3.2 切割

      其实使用的就是String的split(String regex)方法。返回值为String[ ]类型。

		String str = "abcdddeffgggghhhhh";
		
		String regex2 = "(.)\\1";// 复用了1次,代表将2个重复的切割
		String regex3 = "(.)\\1+";//复用了1次或多次,代表将2个以上重复的切割
		
		String[] strs2 = str.split(regex2);//相当于按照两个相同字符来切割的,打印结果abcdeh
		String[] strs3 = str.split(regex3);//按至少2个相同的字符打印,打印结果abce

3.3 替换

       其实就是使用了String的replaceAll(String regex, String str)方法,第一个参数就是正则表达式,规定要什么样的  位置需要替换,第二个参数表示所要替换成的表达式。返回值为String类型。

        例如如何将手机号的的4-7为屏蔽成****,思路就是:先将1-3位和8-11位分别封装成两个组,再将中间的4-7位替换成*,另外两组的内容不变($1 代表使用获得的第1组对象内容)。

		String telNum1 = "13855555501";
		String str1 = telNum1.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
		System.err.println(str1);//返回结果为138****5501

3.4 获取字符串中符合正则规则的内容

      步骤:

               1.将正则规则封装成对象

                  Pattern p = Pattern.compile(regex);

String  str = "good good study , day day up! ";
		String regex = "\\b[a-z]{3}\\b";   //  \\b 为单词边界
		Matcher m = Pattern.compile(regex).matcher(str);
		while(m.find())
		{
			System.out.print(m.group());  // 输出为 day day
		}


 

                2.创建一个匹配器,通过正则对象的matcher方法。

                  Matcher m = p.matcher(被操作字符串);

                3.通过匹配器对象的方法对字符串进行操作
                   如先通过m.find()查找与该模式匹配的输入序列的下一个子序列,他返回boolean

                   再通过m.group()返回子序列。

                   while(m.find)

                    {      m.group;     }

      举例:返回下列字符串中由三个字母所组成的单词。

      

		String  str = "good good study , day day up! ";
		String regex = "\\b[a-z]{3}\\b";   //  \\b 为单词边界
		Matcher m = Pattern.compile(regex).matcher(str);
		while(m.find())
		{
			System.out.print(m.group());  // 输出为 day day
		}


 



 

    


 

 

 ------- android培训java培训、期待与您交流!-------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 爬虫中,正则表达式是非常常用的技术,可以帮助我们从网页中提取出需要的信息。下面是一些常用正则表达式符号和方法: 1. ".":匹配任意单个字符,除了换行符。 2. "^":匹配字符串的开始位置。 3. "$":匹配字符串的结束位置。 4. "*":匹配前一个字符出现 0 次或多次。 5. "+":匹配前一个字符出现 1 次或多次。 6. "?":匹配前一个字符出现 0 次或 1 次。 7. "{m}":匹配前一个字符出现 m 次。 8. "{m,n}":匹配前一个字符出现 m 到 n 次。 9. "(...)":分组匹配,匹配括号内的表达式。 10. "[...]":匹配括号内的任意一个字符。 11. "[^...]":匹配不在括号内的任意一个字符。 12. "\d":匹配数字,等同于 [0-9]。 13. "\D":匹配非数字,等同于 [^0-9]。 14. "\s":匹配空白字符,包括空格、制表符、换行符等。 15. "\S":匹配非空白字符。 16. "\w":匹配单词字符,包括字母、数字、下划线。 17. "\W":匹配非单词字符。 在 Python 中,使用 re 模块进行正则表达式的匹配。常用方法包括: 1. re.compile(pattern):将正则表达式编译成一个对象,提高匹配效率。 2. re.search(pattern, string):在字符串中搜索匹配正则表达式的第一个位置。 3. re.findall(pattern, string):在字符串中搜索匹配正则表达式的所有位置,并返回一个列表。 4. re.sub(pattern, repl, string):将字符串中所有匹配正则表达式的字符替换为指定的字符串。 以上是一些常用正则表达式符号和方法,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值