这节我们学习从一个字符串中寻找0到多个相符的字符串的正则表达式的写法。
●re+代表匹配1到多个re
意思就是要寻找的字符串中有1个或者任意多个re都是符合要求的。
以下面代码举例说明:
运行结果:
说明:上面的代码中,我们是从text这个字符串中寻找字符串,用以描述要寻找的字符串的模式的正则表达式是:r'hahaha(~)+'
这个正则表达式意思是:以"hahaha"开头,后面跟1个或者多个"~"的字符串都是符合要求的字符串。
上面代码中,text中的字符串"hahaha~~~~~~"是符合正则表达式描述的规则的,所以被找到然后打印出来了。
如果text = "I'm so happy right now,hahaha~",那么最后打印出来的结果就是"hahaha~",也就是说,"hahaha"后面只要跟1个或者任意多个"~",都匹配正则表达式r'hahaha(~)+',都会被找到并打印出来。
但是如果text = "I'm so happy right now,hahaha",就不匹配正则表达式了,运行结果就会报错。
大家自己试试修改text字符串,运行结果来验证。
提示:因为正则表达式本身是用字符串来表示的,所以在这里,re是指代字符串的,re+就表示1个或任意多个字符串,比如说,如果re指代的字符串是"abc",那么re+就表示1个或任意多个"abc"。
●re*代表匹配0到多个re,也就是说匹配任意多个re
意思就是要寻找的字符串中有任意多个re都是符合要求的,0个也是符合要求的。
以下面代码举例说明:
运行结果:
说明:
text字符串中"hahaha"后面无论有0个"~",还是任意多个"~",都会寻找到并打印出来,大家自行修改text进行验证。
●()表示选择要重复的字符串,{}表示精确的重复多少次
前面我们介绍过用()结合|,或者()结合?实现正则表达式的可选规则。除此之外,我们记住()还有一个作用,就是表示在正则表达式中一部分要重复的字符串可以用()括起来。
用()可以把需要重复的字符串括起来,而用{}就表示把()括起来的部分精确的重复几次。
我们前面学了?是表示0或1次,+是表示1或多次,*是表示任意多次,包括0次,这几种方式都是重复的次数不确定不精确。而{}则表示一个精确的具体的次数,表示次数的数字写在{}里面。
以下面代码举例说明:
我们在一个字符串中寻找手机号码,不用()和{}的代码如下:
运行结果:
我们看到上面的代码中,r"\d\d-\d\d\d\d\d\d\d\d\d\d\d"表示要寻找的手机号码是前面以2个数字开头,然后跟一个横杠"-",然后再跟11个数字。\d代表数字,还记得吗?
但是这样写我们看到这个正则表达式中前面2个\d和后面11个\d都是重复的。
那么我们就可以用()和{}来简化表达重复的字符串。
用()和{}来简化代码如下:
运行结果:
我们看到结果是一样的。
注意,假如message中的数字字符串是86-19999,或者只要横杠-前面少于2个数字或者横杠-后面少于11个数字,用这个正则表达式都是寻找不到的,运行结果会报错。大家自己修改message中的电话号码数字进行验证理解。
以上就是在正则表达式中如何表达寻找0到多个字符串,以及寻找重复多少次的字符串的方法。