正则规则

/…/ 代表一个模式的开始和结束
^   匹配字符串的开始
$   匹配字符串的结束
(x) 匹配x保存x在名为$1...$9的变量中 
x|y 匹配x或y 
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
[^xyz] 不匹配这个集合中的任何一个字符 

[\b] 匹配一个退格符 
\b 匹配一个单词的边界 
\B 匹配一个单词的非边界 
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M 
\n 匹配一个换行符 
\r 匹配一个回车符 
\t 匹配一个制表符 
\v 匹配一个重直制表符
\s  任何空白字符
\S  任何非空白字符
\d  匹配一个数字字符,等价于[0-9]
\D  除了数字之外的任何字符,等价于[^0-9]
\w  匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

.   除了换行符之外的任意字符

{n} 匹配前一项n次
{n,}    匹配前一项n次,或者多次
{n,m}   匹配前一项至少n次,但是不能超过m次
*   匹配前一项0次或多次,等价于{0,}
+   匹配前一项1次或多次,等价于{1,}
?   匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1}


"^\\d+$"  //非负整数(正整数 + 0) 
"^[0-9]*[1-9][0-9]*$"  //正整数 
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0) 
"^-[0-9]*[1-9][0-9]*$"  //负整数 
"^-?\\d+$"    //整数 
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0) 
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
"^(-?\\d+)(\\.\\d+)?$"  //浮点数 
"^[A-Za-z]+$"  //由26个英文字母组成的字符串 
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串 
"^[a-z]+$"  //由26个英文字母的小写组成的字符串 
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串 
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址 
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url 
字符? 
意义:匹配?前面的字符0次或1次。 
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;

//(?![0-9]+$) 不能是纯数字 , 限制 ,不占位
            
// ?! 开头不能只是拼接数字结尾
// 开始位置开始算起 , $是一个结尾位置
//(?![0-9]+$)就是修饰不能是纯数字
            
// 断言此位置后,字符串结尾之前,所有的字符不能全部由数字([^a-zA-Z]表示非英文字母,结合下文,这里匹配数字)组成。
// [0-9]+ 是纯数字
// ?! 不能以后边的这些开始。
//(?![a-zA-Z]+$) 不能是纯字母 , 限制,不占位
            
//[0-9A-Za-z]{6,20} 6-20位的字符
var reg=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;


2.查找子串在父串中的位置

>>> re.search(r'shuage','i love shuage!!')
<_sre.SRE_Match object; span=(7, 13), match='shuage'>

2.查找父串中所有的子串,返回一个数组

>>> re.findall(r'[a-z]','ShuaiGe')
['h', 'u', 'a', 'i', 'e']

3.综合整理

.        点(.)代表任意字符
\.       匹配点(.)
\d      配置所有的数字
[]       匹配[]里面任何一个字符
{}       前边要匹配的字符要显示多少次
|        逻辑或
()       表示分组
^       以字符串开头
$       以字符串结尾
\       把元字符变为普通字符,把普通字符变为特殊字符例\d
\数字   例如\1表示第一组(小括号里面的正则)再重复一次,\2表示第二组再重复一次
            举例: (shuage)\1  == shuageshuage     (shuage)(hao)\2 == shuagehaohao
        
        如果以0开头,或者3个数字的长度,那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的ASCII码值对应的字符


[.]  匹配.

[\]   会报错,\ 在[]中表示转意符
[\n]  表示回车
[^a-z] 表示除了a-z以外的都匹配,^表示取反
[a-z^] 表示^本身

*   表示匹配前面的子表达式零次或多次,等价于{0,}
+  表示匹配前面的子表达式一次或多次,等价于{1,}
?   表示匹配前面的子表达式零次或1次,等价于{0,1}

正则默认是贪婪模式,启用非贪婪模式方法:在重复后面加上?就可以了。


\b   表示匹配一个单词的边界,被定义为Unidcode的字母数字或者下横线字符也被认为是一个单词的一部分    .()!属于单词的边界

\B   表示匹配非单词边界,其实就是跟上边的相反
\D  表示匹配跟\d相反的字符
\s   表示匹配空白字符,例如 \t(制表符)\n(空格)\r(回车)\f(换页)\v(表示垂直的tab键)
\S  表示与\s相反
\w 表示匹配单词字符
\W 表示与\w相反

4.正则说明

[a-z] 匹配所有的小写字母
[0-9] 匹配所有的数字
3{3}  3个3   大括号前边这个字符是多少个
3{3,10}   3-10个3   大括号前边这个字符是多少个

5.案例

匹配(0-255):[01]\d\d|2[0-4]\d|25[0-5]    按照每位来匹配
匹配ip :(([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3}([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})
  解释:
    ([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1}) : ()小括号里面的是一个完整部分,匹配(0-255)
    (([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.) : 最外边小括号是一个完整部分,匹配(0-255).
    (([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3} : 表示前边的小括号执行3次

正则默认贪婪模式
>>> s = ' i love shuage '
>>> re.search(r'<.+>',s)
<_sre.SRE_Match object; span=(0, 43), match=' i love shuage '>

启用非贪婪模式
>>> s = ' i love shuage '
>>> re.search(r'<.+?>',s)
<_sre.SRE_Match object; span=(0, 6), match=''>

6.编译正则表达式 -- 成模块级别 --有6种编译模式

>>> p = re.compile(r'[A-Z]')
>>> p.search('I love ShuaGe')
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> p.findall('I love ShuaGe')
['I', 'S', 'G']

你可能感兴趣的:(正则规则)