正则的语法:使用元字符进行排列组合用来匹配字符串,在线测试表达式可直接点击下面的链接在线正则表达式测试OSCHINA.NET在线工具,ostools为开发设计人员提供在线工具,提供jsbin在线 CSS、JS 调试,在线 Java API文档,在线 PHP API文档,在线 Node.js API文档,Less CSS编译器,MarkDown编译器等其他在线工具https://tool.oschina.net/regex
1.正则表达式的安装打开本地终端,导入下面的代码
pip install re2. 正则表达式对象
2.1 re.RegexObject
re.compile() 返回 RegexObject 对象。
2.2re.MatchObject
group() 返回被 RE 匹配的字符串。
-
start() 返回匹配开始的位置
-
end() 返回匹配结束的位置
-
span() 返回一个元组包含匹配 (开始,结束) 的位置
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
| 修饰符 | 描述 |
|---|---|
| re.I | 使匹配对大小写不敏感 |
| re.L | 做本地化识别(locale-aware)匹配 |
| re.M | 多行匹配,影响 ^ 和 $ |
| re.S | 使 . 匹配包括换行在内的所有字符 |
| re.U | 根据Unicode字符集解析字符。这个标志影响 w, W, b, B. |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
4. 正则表达式元字符
| 模式 | 描述 |
|---|---|
| ^ | 匹配字符串的开头 (以什么开头) |
| $ | 匹配字符串的末尾。(以什么结尾) |
| . | 匹配任意字符,除了换行符。 |
| [...] | 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k' |
| [^...] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
| * | 匹配0个或多个的表达式。 |
| + | 匹配1个或多个的表达式。 |
| ? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
| { n} | 匹配n个前面表达式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。 |
| { n,} | 精确匹配n个前面表达式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。 |
| {n,m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
| a| b | 匹配a或b |
| () | 匹配括号内的表达式,也表示一个组 |
| (?>) | 匹配的独立模式,省去回溯。 |
| w | 匹配数字字母下划线 |
| W | 匹配非数字字母下划线 |
| s | 匹配任意空白字符,等价于 [tnrf]。 |
| S | 匹配任意非空字符 |
| d | 匹配任意数字,等价于 [0-9]。 |
| D | 匹配任意非数字 |
| A | 匹配字符串开始 |
| Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。 |
| z | 匹配字符串结束 |
| G | 匹配最后匹配完成的位置。 |
| b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
| B | 匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 |
| n, t, 等。 | 匹配一个换行符。匹配一个制表符, 等 |
| 1...9 | 匹配第n个分组的内容。 |
| 10 | 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。 |
正则表达式:常用元字符
. //匹配除换行符以外的任意字符 w //匹配字母或数字 s //匹配任意的空白字符 d //匹配数字 n //匹配一个换行符 t //匹配一个制表符 //用于校验 ^ //匹配字符串的开始 $ //匹配字符串的结尾 W //匹配非字母或数字或下划线 D //匹配非数字 S //匹配非空白符 a|b //匹配字符a或字符b () //匹配括号内的表达式,也表示一个组 [...]//匹配字符组中的字符 [^...]// 匹配除了字符组中的字符的所有字符 a-zA-Z0-9 //匹配所有的数字和字母
量词:控制前面的元字符出现的次数
* //重复0次或多次
+ //重复一次或更多次
? //重复0次或一次
{n} //重复n次
{n,} //重复n次或更多次
{n,m}//重复n到m次
*贪婪匹配和惰性匹配
.* //贪婪匹配 (.*默认往多的去找) .*? //惰性匹配 (?让*尽可能少的匹配结果)
【了解贪心匹配和惰性匹配】
惰性匹配是指尽可能少的去匹配
贪心匹配是指尽可能多的去匹配
简单案例一:' . '的应用
几个点就表示匹配几个字符
简单案例二:输出所有的数字
如果使用w的话,输出的是包含数字字母和字符串的
如果使用d的话,输出的则是10个单数字,并不是我们想要的结果
所以可以使用这个元字符来匹配
简单案例三:校验:要求只能输入11位的电话号码时
如果使用11个d来确定11位电话号码的话,当前面和后面有字母时则也能通过
所以需要使用到^ 这个元字符,如果后面也存在字母,则需要使用$这个元字符
简单案例四:熟悉[...]
观察可以知道,只匹配[xxxx]中的值
匹配字符串中所有的数字和字母[a-zA-Z0-9],该中括号里的'-'已经不是减的意思了,而是谁到谁的意思,表示a到z,A到Z,0到9。[a-zA-Z0-9_]==w
成功匹配到了所有到数字和字母
5.组合字符| .*? | 只匹配符合条件的最少字符,尽可能少的匹配 |
| .* | 任意一个字符 出现0次或多次 尽可能多的匹配 |
| [^0-9] | 取反,匹配数字之外 |
| [0-9] | 匹配任何数字。类似于[0123456789] |
| [a-z] | 匹配任何小写字母 |
| [A-Z] | 匹配任何大写字母 |
| [ab]cde | 匹配acde 或者 bcde |
| abc[de] | 匹配abcd 或 abce |
| [abcdef] | 匹配中括号内的任意字符 |
组合案例一:(d*) :*的话就是重复0次或者多次 ,所以题目中”我“不是数字,返回空结果,继续。直到数字,输出数字串。
(d+):+的话就是重复一次或者多次 ,所以d+中d至少要有一次
案例中“我”不是数字,跳过,一直跳到10010的时候,因为+是重复一次或者多次,所以到了1以后,往后看是不是数字,是数字就继续,不是则返回之前的长串。



