此文章仅为自己学习记录之用,如有不正确的地方欢迎指正,非常感谢
目录
1.常见元字符
1)匹配单个字符的元字符
. | 除了换行符以外的任何单个字符 |
\d | 匹配0-9间任意一个数字字符,等价于[0-9] |
\D | 匹配非数字字符,等价于[^0-9] |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v] |
\S | 匹配任何非空白字符,等价于[^\f\n\r\t\v] |
\w | 匹配字母数字下划线。等价于[A-Za-z0-9_] |
\W | 匹配非字母数字下划线。等价于[^A-Za-z0-9_] |
2)确定数量的元字符
* | 匹配前面的子表达式人任意次,包括0次 |
+ | 匹配前面的子表达式人一次或多次,不包括0次 |
? | 匹配前面的子表达式0次或1次 |
{m,n} | 匹配前面的子表达式指定的次数,至少m次,至多n次,括号内也可以只填写一个数字如{3}表示固定匹配三次 |
3)其它元字符
[] | 匹配括号内的几个字符之一,如[abc],里面可以用 - 来指定范围,就不需要列举出所有的字符,如[abc]就等价于[a-c] 注:一些元字符在方括号内就没有了特殊含义,变成了普通字符,如 . ,[.]就仅代表匹配一个 . 字符。方括号中的^代表非 |
\ | 转义字符,当要匹配的字符刚好是元字符时,可以在前面加上\。如要匹配+时,就可以使用\+ |
| | 匹配两个子表达式中的一个,例如x|y就是匹配x或y。'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 |
^ | 匹配文本的起始位置 |
$ | 匹配文本的结束位置 |
2.使用技巧
1)贪婪模式和非贪婪模式
如果要在下面的信息中找出所有的王姓女士
王三女士,李四喜女士,赵翔先生,吴四女士,王香女士
我们可能会想使用 王.*女士 来进行匹配
但是验证的匹配结果却是把所有的都匹配上了,因为刚开始的王和最后的女士也满足这个正则表达式的语法
这是因为正则表达式中, ‘*’, ‘+’, ‘?’ 都是贪婪地,使用他们时,会尽可能多的匹配内容
要解决这个问题,我们可以使用非贪婪模式,在*后加上?即可
2)分组
还是这个例子
王三女士,李四喜女士,赵翔先生,吴四女士,王香女士
如果我们要得到的是王姓女士的名字呢?
此时我们可以使用()来进行分组
使用 (王.*?)女士就可以得到我们想要的内容,这个可以搭配python来使用但本文章暂时不做赘述
3.推荐练习网站
这是两个可以验证正则表达式的网站
regex101: build, test, and debug regex
正则表达式在线测试 | 菜鸟工具 (jyshare.com)
这是一个可以练习正则表达式题目的网站