正则表达式
正则基础
常用符号
比较常用的是:
-
?
, 代表前面的字符能出现 0 次或 1 次, 比如colou?r
表示在目标串中找到color
或colour
并返回, 即u
可以出现 0 次或 1 次 -
*
, 代表前面的字符能出现 0 次或无限次, 比如colou*r
表示在目标串中找到color
、colour
、colouur
、colouuur
等并返回, 即u
可以出现 0 次或无限次 -
+
, 代表前面的字符能出现 1 次或无限次, 比如colou+r
表示在目标串中找到colour
、colouur
、colouuur
等并返回, 即u
可以出现 1 次或无限次 -
()
, 代表以正则表达式匹配到目标后只返回括起来的内容, 比如(colou*)r
, 其匹配规则与colou*r
一致, 但只返回colo
、colou
、colouu
等
这里准备了一张表(来自小甲鱼), 列出了正则表达式中常用的符号, 有需要注意的地方将在表下方说明.
贪婪? 非贪婪?
?
还有个作用是让匹配模式变为非贪婪匹配.
什么是贪婪? 非贪婪?
如:
String str = "abcaxc"; Patter p = "ab*c";
- 贪婪匹配: 趋向于最大长度匹配. 如上面使用模式 p 匹配字符串 str, 结果就是匹配到: abcaxc (ab*c).
- 非贪婪匹配: 趋向于最长度匹配. 如上面使用模式 p 匹配字符串 str, 结果就是匹配到: abc (ab*c).
默认情况下, *
、 +
、
?
都是贪婪匹配, 在后面加上 ?
后, 即:
*?
、 +?
、
??
为非贪婪匹配.
(x*?)、 (x*)、 x*?、 x*
表达式中的 x
表示可以用 .
、
\d
、 \w
等符号代替,
表示要匹配的内容:
-
(x*)
, 表示贪婪式匹配x
, 例如以'(.*)r'
能从'colorcolorcolor'
匹配到'colorcolorcolo'
-
x*
, 表示贪婪式匹配x
, 例如以'.*r'
能从'colorcolorcolor'
匹配到'colorcolorcolor'
-
(x*?)
, 表示非贪婪式匹配x
, 例如以'(.*?)r'
能从'colorcolorcolor'
匹配到['colo', 'colo', 'colo']
-
x*?
, 表示非贪婪式匹配x
, 例如以'.*?r'
能从'colorcolorcolor'
匹配到['color', 'color', 'color']
ptyhon
python 中支持正则表达式的模块是 re
, 使用时
import re
即可.
-
search
: 匹配第一个符合规律的内容, 返回一个正则表达式对象 -
match
: 只有当开头就能匹配到模式的时候, 才返回一个正则表达式对象 -
findall
: 匹配所有符合规律的内容, 返回包含结果的列表 sub
: 替换符合规律的内容, 返回替换后的值
search
与
match
返回的是一个正则表达式对象, 需要通过
group(index)
去获取内容,
index
与正则表达式中使用的 ( )
有关:
index 指出获取正则表达式中第几个括号的返回结果, 0 (或者省略
index) 表示获取无括号的结果, 即 (x*?)
和
x*?
通过
group(0)
返回的结果是一样的, 如果 index
大于括号的数量则会报错;
比如 r = re.match(r'(.*?)r(.*?)r', 'xxxryyyr')
:
r.group()
返回xxxryyyr
r.group(1)
返回xxx
r.group(2)
返回yyy