
made_in_miliLV的主页.png
- 正则表达式:正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在开发的使用场景 - 例如:匹配url等等
本文中,对正则表达式的一些语法使用,进行了探究与测试,其中包括以下几部分: ①.正则表达式模块组成 ②.正则表达式的语法 - '.' , '[...]' , '\d \D' , '\s \S', ' \w \W' ③.正则表达式的语法 - ' * ', ' + ', ' ? ', ' {m} {m,n}', ' *? +? ?? ' ④.正则表达式的语法 - '^', ' $' ,' \A \Z' ⑤.正则表达式的语法 - '|' , ' (ab) ',

1.png
a.使用re的compilie - 生成 pattern对象
b.调用pattern的方法 - 匹配字符串 -- 方法举例:match
--match:从字符串开头开始匹配,匹配的内容是 compile(‘str’)中的 str
c.返回一个匹配结果 - result
2.png

3.png

4.png

5.png
a.查看pattern内容

6.png
b.查看pattern类型 - pattern实例

7.png
c.查看pattern的所有方法

8.png
d. 查看match的用法:

9.png

10.png

11.png

_12.png
==> 匹配成功,返回对象

13.png
==>匹配失败 - 返回zero

15.png

16.png
group() - 使用说明 - 返回字符串or 元组
==>匹配的内容是'()' - 返回元组
==>匹配的内容是str - 返回字符串
17.png
a.查看匹配规则 - miliLV

18.png
b.查看源字符串

19.png

20.png
c. miliLV 在 'miliLV study python' 字符串中的 [0,6)位置,没毛病

21.png

22.png
匹配规则 - ‘python’ + re.I => 可以匹配大写的'python'

23.png
进行匹配的数据源 - 'PYThon'

24.png
查看匹配结果

25.png
匹配的规则 - 'python' ,re.I 匹配数据源大写的PYT 拼小写的 hon! == 'PYThon' 这个匹配规则,只要是 'python'这个str,无论里面的字符大小写,都可以顺利匹配!

26.png

27.png

一(1).png
①.'a' 匹配 'a'

一(2).png
②.'a'的规则 - 匹配内容:‘b’

一(3).png
③.使用万能匹配 - '.'

一(4).png
④.查看'.'的匹配规则:

一(5).png

一(6).png

一(7).png

一(8).png
总结: 一个“.” 只能对应一个字符!
疑问 - 多字符匹配如何匹配??

一(9).png

一(10).png

一(11).png
总结: 几个字符 - 就用几个"." 去对应匹配 一个点不是匹配一个字符串!而是一个字符! 所以上图的{.} - 匹配不了两个字符{ 1C }的内容!- zero!

一(12).png

一(13).png

一(14).png

一(15).png
解决办法 : 区间匹配 - 使用简写

一(16).png
大写字母 - 大A呢?

一(17).png

一(18).png

一(19).png
区间匹配,匹配规则如下
==> 怀疑:[a,b]规则 - 匹配 ‘1,2’

一(20).png

一(21).png
测试 -匹配双字符呢?

一(22).png

一(23).png
总结: 一个‘[ ]’ 就是匹配一个字符,多余的字符会被忽略!

一(24).png

一(25).png

一(26).png
2.使用单词匹配 :\w -匹配非正常字符 - 例如此处的“ ” - 空格

一(27).png
3.使用非单词匹配 : \W - 匹配非正常字符 - 空格

一(28).png
1.匹配规则'[xxx] '

一(29).png
2.匹配规则 - '[[xxx]]'

一(30).png
3.解决办法 - 加转译字符!

一(31).png

二(1).png

二(2).png

二(3).png

二(4).png

二(5).png
* 可以匹配 0 次 或者多次,例如上图的[a-z]* 匹配0次,也成功匹配!
1.常规匹配 - 未使用 *

二(6).png
2.优化匹配 - 带 *

二(7).png

二(8).png

二(9).png
总结:

二(10).png
①.大小写字母开头

二(11).png
②.下划线开头

二(12).png

二(13).png

二(14).png
③.数字开头

二(15).png
变量名 -- 只能以 下划线_ or 大小写字母开头!
①.匹配单字符

二(16).png
②.匹配单下划线

二(17).png
③.匹配 - 多字符

二(18).png
==> 只匹配了一个字符!! 所以需要'+'登场了!
④.匹配 - 多字符 && 使用 '+'

二(19).png
⑤. 匹配 - 带数字的!比如button1

二(20).png
⑥.优化- 加号+ && * 结合使用!

二(21).png
思路:
test: ①.前部分用+,匹配后部分(数字or英文字母,但是不设置 * 的次数)

二(22).png
前部分[_,a-z,A-Z] 使用了‘+’,表示可以1-N次,当第一个不满足匹配规则的 - 数字1出现之后,停止前部分匹配 - 使用后部分 带[0-9]的匹配规则
②.后部分的匹配内容 - 数字长度改为不等于1之后:

二(23).png
③.优化:使用'*' - 表示后部分的规则 - 可以不出现 or 出现多次

二(24).png

二(25).png
例如 - 验证:一个数字 - 是否是0-99直接的数字
分析 ->
test:

二(26).png

二(27).png

二(28).png

二(29).png
解释原因:

二(30).png
①.匹配5次 - { 5 }

二(31).png
②.不满足条件的 { 5 }

二(32).png
解释:虽然参与匹配的str 是 ‘1234A’有五个字符,But并不是所有字符都满足匹配规则! 最终只有1234满足,所有匹配的次数 - 4次 != 5次,不满足! -> 返回zero!
③.设置区间匹配 {4,6}

二(33).png
④. 测试 - 越界

二(34).png
⑤.测试 - 部分不满足匹配规则的 - str

二(35).png
⑥.测试 - gamil邮箱 - 假定6位字符 + @ gmail.com

二(36).png
⑦.测试 - 越界

二(37).png
⑧.优化 - 改善匹配规则的次数

二(38).png

二(39).png

二(40).png
贪婪模式- abc均在 [a-z]* 的匹配规则下,所以全匹配了 - 尽可能多的匹配

二(41).png

二(42).png

二(43).png

二(44).png
6.非贪婪模式下 '?' ==> ([0,1] - 取最少 = 0次!)

二(45).png

三(1).png
总结: 字符串开头 - ^ 字符串结尾 - $
①.邮箱匹配

三(2).png
②.如果-结尾在.com之后,又加了一堆东西

三(3).png
所以:为了正确匹配邮箱,应该设置以.com结尾为匹配条件! -> 使用$结尾符

三(4).png
③.正确匹配结果如下:

三(5).png
④.完整写法 - 再加上开头^

三(6).png

三(7).png
test: 1.\A 写在匹配规则前

三(8).png

三(9).png
3.正确写法:

三(10).png
\A写在前面没错,第一次error,内容里有',' 匹配规则 - \w - 只能匹配字符!数字 && 大小写字母 && 下划线_ !

三(11).png

三(12).png

四(1).png
-| '或' 的用法
①.'abc' | '123' ==> 可以匹配 'abc' or '123'!

四(2).png

四(3).png

四(4).png
猜测结果:
②.结果如下:

四(5).png
原理解释:
test2:

四(6).png
猜测 - 匹配不上:
③.结果如下:

四(7).png
原理解释:

四(8).png
①.需求 : 匹配gmail邮箱:

四(9).png
②.需求 - 匹配 gmail && 163 邮箱 - 思路 : 使用 “|”(或)

四(10).png
③.精简写法 - 不抄写整个的邮箱

四(11).png
- 想要实现参数 ~ gmail || 163的替换,但是后半部分 - 直接被舍去匹配了
特别注意:这里的匹配,并不是 - ‘gmail' or '163.com'! -- 这整个后半部分

四(12).png

四(13).png

四(14).png

四(15).png
主要用在XML标签中,暂不学习