正则表达式(regular expression)
描述了一种字符串匹配的模式(pattern)
,可以用来检查一个字符串串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式常用的字符如下:
char |
描述 |
( ) |
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
* |
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 |
+ |
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 |
. |
匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 |
[ |
标记一个中括号表达式的开始。要匹配 [,请使用 [。 |
? |
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 |
\ |
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\‘ 匹配 “",而 ‘(‘ 则匹配 “(“。 |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。 |
{ |
标记限定符表达式的开始。要匹配 {,请使用 {。 |
| |
指明两项之间的一个选择。要匹配 |,请使用 |。 |
匹配单个字符
Char |
Function |
. |
匹配任意1个字符(除了\n) |
[ ] |
匹配[ ]中列举的字符 |
\d |
匹配数字,即0-9 |
\D |
匹配非数字,即不是数字 |
\s |
匹配空白,即 空格,tab键 |
\S |
匹配非空白 |
\w |
匹配单词字符,即a-z、A-Z、0-9、_ |
\W |
匹配非单词字符 |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import re ret = re.match(".","M") print(ret.group())
ret = re.match("t.o","too") print(ret.group())
ret = re.match("[hH]ello","hello Python") print(ret.group())
ret = re.match("[0-9]Hello Python","7Hello Python”) print(ret.group()) # 7Hello Python
ret = re.match("[0-3,5-9]Hello Python","7Hello Python") print(ret.group()) # 7Hello Python
ret = re.match("嫦娥\d号","嫦娥1号发射成功") print(ret.group()) #嫦娥1号
|
匹配多个字符
Char |
Function |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
+ |
匹配前一个字符出现1次或者无限次,即至少有1次 |
? |
匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} |
匹配前一个字符出现m次 |
{m,n} |
匹配前一个字符出现从m到n次 |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import re ret = re.match("[A-Z][a-z]*","M") print(ret.group())
ret = re.match("[A-Z][a-z]*","MnnM") print(ret.group())
ret = re.match("[1-9]?[0-9]","7") print(ret.group())
ret = re.match("[1-9]?\d","33") print(ret.group())
ret = re.match("[1-9]?\d","09") print(ret.group())
ret = re.match("[a-zA-Z0-9_]{6}","12a3g45678") print(ret.group())
ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66") print(ret.group())
|
获取子串
String |
Function |
(.+?) |
惰性匹配,从左到右匹配,并且至少有一个字符 |
(.+) |
贪婪匹配,整个字符串是否匹配,并且至少有一个字符 |
(.*?) |
惰性匹配,从左到右匹配 |
(.*) |
贪婪匹配,整个字符串是否匹配 |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import re txt = "<111222><3334444>" ret = re.findall(r"<(.+?)>", txt)
txt = "<111222><3334444>" ret = re.findall(r"<(.+)>", txt)
txt = "<111222><3334444>" ret = re.findall(r"<.+>", txt)
txt = "<><3334444><555666>" ret = re.findall(r"<(.*?)>", txt)
txt = "<><3334444><555666>" ret = re.findall(r"<(.+?)>", txt)
|