我的理解:正则表达式(Regular Expression)是用来做字符串匹配的一种精简表达方法。
一般形式:result = re.match(正则表达式, 匹配字符串)
python中的正则表达式匹配规则:
从左到右匹配,一旦匹配成功立刻返回class类型(不再匹配后续字符),否则返回NoneType
声明:e.g. ‘\d’ 表示为数字,则相应大写 ‘\D’ 表示取反,即非数字。这里不对其大写做说明。
符号 | 作用 | 等价于 |
---|---|---|
. | 占一个字符的位置,可匹配除\n的任何字符 | / |
[ 规则 ] | 匹配一个满足括号内规则的字符 | / |
\d | 匹配一个数字 | [1-9],[^\D] |
\s | 匹配空格,如 \t, \n及空格等 | [^\S] |
\w | 匹配数字、字母、下划线 | [1-9a-zA-Z_],[^\W] |
注:[ ] 间的规则与规则之间无需用空格隔开,如上面的 \w 的另一种表示。
[ ] 内的 ^ 表示非 的意思,[^123] 等价于 [^1^2^3]
[1-9]:此字符为1到9间的数字
符号 | 作用 | 等价于 |
---|---|---|
* | 符号前的字符可有可无 | {0,} |
+ | 符号前字符至少出现一次 | {1,} |
? | 符号前字符只能出现0次或1次 | {0,1} |
{m} | 指定符号前字符出现数量为m次 | / |
{m,} | 指定符号前字符至少出现m次 | / |
{m,n} | 指定…区间为m次到n次 | / |
注:
1.解决re与python中转义字符的冲突问题,e.g.
有字符串为 string = “\\nstring”(表转义),如果做正则表达式匹配这个字符串,需要这样写"\\\\nstring",为什么是四个反斜杠呢?因为对比匹配字符串来说,re的第一个反斜杠用来作为\ 的匹配,第三个反斜杠则用来作为\n的匹配。
python中的原始(raw)字符串很好的解决了这个问题,在re字符串前加r例如string = r"\nstring"就直接表示了原始的字符串(也就是双引号内什么样,字符串就是什么样)。
因此,在一般的re前最好加上r。
2.几个帮助理解上述符号的例子:
符号 | 作用 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
一个例子,匹配手机号码格式是否正确:
result = re.match(r"^1[35678]\d{9}$", phone_number)
未完待续