正则化练习!
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
INT_MAX = (1<<31)-1 #2147483647
INT_MIN = -(1<<31) #-2147483648
str = str.lstrip() #清除左边多余的空格
num_re = re.compile(r'^[\+\-]?\d+') #设置正则规则
num = num_re.findall(str) #查找匹配的内容
num = int(*num) #由于返回的是个列表,解包并且转换成整数
return max(min(num,INT_MAX),INT_MIN) #返回值
^
:匹配字符串开头
[\+\-]
:代表一个+字符或-字符
?
:前面一个字符可有可无
\d
:一个数字
+
:前面一个字符的一个或多个
\D
:一个非数字字符
*
:前面一个字符的0个或多个
正则化
一般正则化可以分为三种操作,
- 连接操作:
AB
表示了{AB} - 或操作:
AB|C
表示了{AB},{AC} - 闭包操作:
A*B
表示{B},{AB},{AAB} 表示重复前者0次或多次
优先级顺序:闭包 > 连接 > 或操作,还可以借助括号修改优先级
优化的正则表达式:
- 字符集描述符:
.
通配符[]
指定的集合 [0-9][^]
补集 [^1234]任意非1234的字符
- 闭包的简写
+
(AB)+ 表示至少重复一次?
(AB)?表示重复0次或1次{2}
(AB){2-3}表示出现2次或3次
- 转义符
- 用
\
反斜杠表示转义符,\t
为制表符,\n
为换行符,\s
为任意空白符