正则表达式

以python为例,列举一些常用的正则表达式用法。

[] :在正则表达式中,[]表示满足括号中任一字符。比如“[hi]”,它就不是匹配“hi”了,而是匹配“h”或者“i”。
如果把正则表达式改为“[Hh]i”,就可以既匹配“Hi”,又匹配“hi”了。

r :是raw的意思,它表示对字符串不进行转义。

. :在正则表达式中表示除换行符以外的任意字符。比如当文本是:
Hi, I am Shirley Hilton. I am his wife.
用“i.”去匹配,会得到[‘i,’, ‘ir’, ‘il’, ‘is’, ‘if’]。

*:它表示前面的字符可以重复任意多次(包括0次),只要满足这样的条件,都会被表达式匹配上。

如果要匹配数字,我们可以用[0123456789]。
由于它们是连续的字符,有一种简化的写法:[0-9]。类似的还有[a-zA-Z]的用法。
要表示任意长度的数字,就可以用[0-9] *或者\d *。
但要注意的是,*表示的任意长度包括0,也就是没有数字的空字符也会被匹配出来。一个与 * 类似的符号+,表示的则是1个或更长。

所以要匹配出所有的数字串,应当[0-9]+或者\d+。
如果要限定长度,就用{}代替+,大括号里写上你想要的长度。比如11位的数字:\d{11}。
想要再把第一位限定为1,就在前面加上1,后面去掉一位:1\d{10}。

除了*、+、{}来表示字符的重复。其他重复的方式还有:
? - 重复零次或一次,{n,} - 重复n次或更多次,{n,m} - 重复n到m次

正则表达式不只是用来从一大段文字中抓取信息,很多时候也被用来判断输入的文本是否符合规范,或进行分类。例如:
^\w{4,12}$
这个表示一段4到12位的字符,包括字母或数字或下划线或汉字,可以用来作为用户注册时检测用户名的规则。

\d{15,18}
表示15到18位的数字,可以用来检测身份证号码。

^1\d*x?
以1开头的一串数字,数字结尾有字母x,也可以没有。有的话就带上x。

一些常用的元字符有:
\w - 匹配字母或数字或下划线或汉字。
\s - 匹配任意的空白符。
^ - 匹配字符串的开始。
$ - 匹配字符串的结束。

\S其实就是\s的反义,任意不是空白符的字符。同理,还有:
\W - 匹配任意不是字母,数字,下划线,汉字的字符。
\D - 匹配任意非数字的字符。
\B - 匹配不是单词开头或结束的位置。

[a]的反义是 [^a] ,表示除a以外的任意字符。 [^abcd] 就是除abcd以外的任意字符。

如果有以下手机号:
(021)88776543
010-55667890
02584453362
0571 66345673
一个可以匹配出以上所有结果的表达式是:
\ (?0\d{2,3}[) -]?\d{7,8}

\ (?:()在正则表达式里也有着特殊的含义,所以要匹配字符"(“,需要用”(“。?表示这个括号是可有可无的。
0\d{2,3}:区号,0xx或者0xxx。
[) -]?在区号之后跟着的可能是”)“、” “、”-",也可能什么也没有。
\d{7,8}:7或8位的电话号码。

符号总结

常用的元字符

符号用法
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

常用的反义字符

符号用法
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^a]匹配除了a以外的任意字符
[^abcd]匹配除了abcd这几个字母以外的任意字符

常用的限定字符

符号用法
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,}重复n到m次

常用分组符号

符号用法
(a)匹配a,并捕获文本到自动命名的组里
(? < b > a)匹配a,并捕获文本到名称为b的组里,也可以写成(?'b’a)
(?:a)匹配a,不捕获匹配的文本,也不给此分组分配组号
(?=a)匹配a前面的位置
(?=a)匹配a后面的位置
(?!a)匹配后面跟的不是a的位置
(?<!a)匹配前面不是a的位置

常用懒惰匹配限定符

符号用法
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。
懒惰匹配:匹配尽可能少的字符。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值