正则表达式入门

正则表达式初步

正则表达式是一个字符串,可以用来匹配给定格式的字符。

举个例子,假如我们需要爬取网页的内容,那么当获得网页的源代码之后如何在看似混乱的html代码中获取需要的信息就成了一个重要的问题。而正则表达式就提供了匹配的一个途径。

下面是一些具体的正则表达式的字符集




转义字符

对于\,*,$, .等在正则表达式中有特殊含义的字符,需要在前面添加\表示原本字符的含义。

分组()

用()括起来的部分,作为一个整体,后面可以跟数量词。关于分组的顺序,编号为i的分组是即为左数第i个左括号的分组。我们往往使用分组来提取需要的部分,比如python的group(index)就返回第index个分组匹配的对象。

贪婪模式

 量词 +,*,?,{m,n}  默认匹配尽可能长的字符串 

非贪婪模式可以在上述量词之后加?表示非贪婪。

字符边界

\A 与字符串开始处匹配,不消耗任何字符 

 \Z 与字符串结束的地方匹配,不消耗任何字符 

^  与字符串开始处匹配,不消耗任何字符。在多行模式中,匹配每一行开头 

$  与字符串结束的地方匹配,不消耗任何字符。在多行模式中,匹配每一行末尾 

|的用法

表示“或”,如果没有放在"()"中,则起作用范围是直到整个正则表达式 开头或结尾或另一个 "|"

断言

 分组开头为 ?=, ?!,?<=, ?<!,则分组成为断言。断言必须被满足,但不消耗字符。

  1. Y(?=X ) 声明目标串Y(可为空)右侧须满足模式X。X不消耗任何字符。例如, \w+(?=\d) 与后跟数字的单词匹配,但该数字未被消耗。 
  2. Y(?!X) 声明目标串Y(可为空)右侧不允许满足模式X。X不消耗任何字符。例如,例 如,\w+(?!\d) 与后不跟数字的单词匹配,但不消耗该数字 。 
  3. (?<=X)Y 声明目标串Y(可为空)左侧必须满足模式X。X不消耗任何字符。例如, (?<=19)89 与跟在 19 后面的 89 的实例匹配。X须定长。 
  4. (?<!X)Y 声明目标串Y(可为空)左侧不允许满足模式X。例如,(?<!19)89 与不跟在 19 后面的 89 的实例匹配。X须定长。 

举例:

1. (?=[456])(\d{4}-?){4}(?<!7)$ 可以用来表示

合法的卡号:

1.卡号以4,5或6开头

2.卡号不以7结尾

3.必须正好包含16个数字

4.卡号中的每四个数字可能以'-’分隔

5.除数字与'-'外不能包含有其它字符

2. 可以用"(aa)*((ab)(aa|bb)*(ab|ba))*b(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*"

表示所有字符集为{a, b}且由偶数个a和奇数个b构成的字符串。

(本题的思考方式是因为ab个数皆为偶数可以表示为(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*,那么奇数则在前面加上(aa)*((ab)(aa|bb)*(ab|ba))*b即可,也就是找到一个前面都是{ab}偶数的b,那么后面都是偶数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值