正则匹配注意点个人笔记
正则匹配个人易忽略点记录
标志/模式修正符
多行修饰符(Multline)
与($,^)这两个检查首尾的符号紧密相关,注意点:在默认情况下,它们是默认检查全局,即所有字符的开头和结尾,即使你使用了换行符号,它也不会对首位进行检查。
例如表达式: /.at(.)?$/gm 表示小写字符a后跟小写字符t,末尾可选除换行符外任意字符
1 | "/.at(.)?$/" => The fat |
这里只匹配mat
但是:
1 | "/.at(.)?$/gm" => The fat |
这里就会把fat,sat,mat都给匹配上
总结:
重点就是:m加上后会在每排匹配,没有m只会在全局看尾巴或者开头有没有目标字符。
关于点运算符(.)
本质:就是随意匹配一个字符,包括空格符但是不匹配换行符。
理解:以下例子:’
三者进行对比:
1
2
3
4
5import re
"""关于findall以及点运算符的使用"""
result = re.findall(r".", "The car parked in the garage.")
print(result)这时会输出
['T', 'h', 'e', ' ', 'c', 'a', 'r', ' ', 'p', 'a', 'r', 'k', 'e', 'd', ' ', 'i', 'n', ' ', 't', 'h', 'e', ' ', 'g', 'a', 'r', 'a', 'g', 'e', '.']
1
2
3
4
5
6
7
8
9
* 即匹配所有字符,除了换行符。
```python
import re
"""关于findall以及点运算符的使用"""
result = re.findall(r".ar", "The car parked in the garage.")
print(result)这时会输出
['car', 'par', 'gar']
1
2
3
4
5
6
7
8
9
* 即加权对字符进行匹配,匹配后面跟着`ar`字符的单词
```python
import re
"""关于findall以及点运算符的使用"""
result = re.findall(r".*", "The car parked in the garage ar.")
print(result)这时会输出
['The car parked in the garage ar.', '']
这里我们就要提到贪婪匹配了!
贪婪匹配和非贪婪匹配的区别
入门:个人通俗理解
其实贪婪匹配就是尽可能地多匹配字符,而非贪婪匹配就是匹配到第一个符合条件的字符后收手,计为一个匹配的对象,不再匹配。
参考网站:正则匹配模拟器
比如
.*
就是对字符进行贪婪匹配,将该表达式写作:.*?
就是非贪婪匹配,即懒惰匹配详见如下的例子:
例一:
贪婪匹配的格式就为,表达式
.+
首尾为匹配的表达式模板,比如这个例子,首位就是a
,结尾就为b[空格]a
,那就匹配首位格式为这样的字符传,如图所示,就算把中间数个b
中该有c
字符的话,一样可以匹配,比如:例二:
这里可以发现,当我使用
?
将贪婪匹配转为懒惰匹配后,在第一个格式为a
开头,b
结尾的字符串处匹配就结束了不会像如下这样:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!