非Python独有 re库提供
用法讲解:
模式描述
\w匹配字母数字及下划线
\W匹配非字母数字下划线
\s匹配任意空白字符,等价于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z匹配字符串结束
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串的开头
$匹配字符串的末尾。
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
*匹配0个或多个的表达式。
+匹配1个或多个的表达式。
?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}精确匹配n个前面表达式。
{n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a|b匹配a或b
( )匹配括号内的表达式,也表示一个组
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置配置成功的恶化,match()就返回none
re.match(pattern,string,flags=0) 以^为开头 以$结束
贪婪模式与非贪婪模式 :
重点:.*以及.*? 前者贪 后者不贪 以?后者为基准
转义: 特殊字符的处理 前面加上'\' 使得正则的表达式失去意义
小节:
尽量使用泛匹配,使用括号得到匹配目标,尽量使用非贪婪模式、有换行符就换re.S
re.search 扫描整个字符串并返回第一个成功的匹配 不在意开头如何
建议:为匹配方便,能用search就不用match
re.findall 搜索字符串 以列表形式返回全部能匹配的子串 list类型
re.sub 替换字符串中每一个匹配的子串后返回替换后的字符串 (pattern,'内容',string)
特殊:包含原字符本身 r'\ 使用转义
re.compile 将正则字符串编译成正则表达式对象
以便于复用该匹配模式 (方便复用匹配模式)
pattern = re.complie(pattern,re.S)
以pattern作为字符串传递
经验:
^a-zA-Z 匹配非字母以外的鬼东西
去除中文以外的东西
import re
sample = u'I am from 美国。We should be friends. 朋友。'
for n in re.findall(u'[\u4e00-\u9fff]+',sample):
print(n)
网友评论