首先讲一下一些基础的概念
>>> text1 = '\nB\nb\nB'
>>> text2 = r'\nB\nb\nB' 通过添加r来代表这个是原生字符串
>>> text3 = '\\nB\\nb\\nB' 同过添加\来转义\,让\变成普通字符串(哎呀呀,有点晕)
>>> print(text1) 其实,\\就是代表字符串\,因为\是具有转义的意思,
前面的一个\,把后面的\转义成一个字符串 \
B
b
B
>>> print(text2)
\nB\nb\nB
>>> print(text3)
\nB\nb\nB
###这里的text2和text3是相同的道理
转义字符
|
描述
|
\(在行尾时)
|
续行符
|
\\
|
反斜杠符号
|
\’
|
单引号
|
\”
|
双引号
|
\a
|
响铃
|
\b
|
退格(Backspace)
|
\e
|
转义
|
\000
|
空
|
\n
|
换行
|
\v
|
纵向制表符
|
\t
|
横向制表符
|
\r
|
回车
|
\f
|
换页
|
\oyy
|
八进制数yy代表的字符,例如:\o12代表换行
|
\xyy
|
十进制数yy代表的字符,例如:\x0a代表换行
|
\other
|
其它的字符以普通格式输出
|
模式
|
描述
|
^
|
匹配字符串的开头
|
$
|
匹配字符串的末尾。
|
.
|
匹配任意字符,除了
换行符
,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
|
[...]
|
用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
|
[^...]
|
不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
|
re*
|
匹配0个或多个的表达式。
|
re+
|
匹配1个或多个的表达式。
|
re?
|
匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
|
re{ n}
|
匹配n个前面表达式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
|
re{ n,}
|
精确匹配n个前面表达式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。
|
re{ n, m}
|
匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
|
a| b
|
匹配a或b
|
(re)
|
匹配括号内的表达式,也表示一个组
|
(?imx)
|
正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
|
(?-imx)
|
正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
|
(?: re)
|
类似 (...), 但是不表示一个组
|
(?imx: re)
|
在括号中使用i, m, 或 x 可选标志
|
(?-imx: re)
|
在括号中不使用i, m, 或 x 可选标志
|
(?#...)
|
注释.
|
(?= re)
|
前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
|
(?! re)
|
前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。
|
(?> re)
|
匹配的独立模式,省去回溯。
|
\w
|
匹配数字字母下划线
|
\W
|
匹配非数字
非
字母
非
下划线
|
\s
|
匹配任意空白字符,等价于 [\t\n\r\f]。
|
\S
|
匹配任意非空字符
|
\d
|
匹配任意数字,等价于 [0-9]。
|
\D
|
匹配任意非数字
|
\A
|
匹配字符串开始
|
\Z
|
匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
|
\z
|
匹配字符串结束
|
\G
|
匹配最后匹配完成的位置。
|
\b
|
匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
|
\B
|
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
|
\n, \t, 等。
|
匹配一个换行符。匹配一个制表符, 等
|
\1...\9
|
匹配第n个分组的内容。
|
\10
|
匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。
|
匹配字符串'$数字'
import re
text = "apple price is $99,orange paice is $88"
ret = re.search('\$(\d+)',text) #在re中,$具有特殊的意思,所以需要对他进行转义,转义成普通字符串来进行匹配
print(ret.group())
>> $99
再来一个例子:
匹配text里的\c字符串
text = "apple \c"
ret = re.search('\\\\c',text)
print(ret.group())
\c
我们来好好解释一下为什么要有四个\\\\????(小朋友,你是不是有很多问号????)
text = "apple \c"
ret = re.search(r'\\c',text)
print(ret.group())
\c
这里为什么少了两个反斜杠???