正则指引-括号

只谈情不闲聊 提交于 2020-02-27 10:27:36
正则指引-括号
之前学习字符组和量词,量词是形容字符组的,但是有时候我们希望用量词来形容多个元素,

我们可以用括号完成,我们可以使用(...)把目标元素括起来,就可以把括号内部看成一个整体,

在括号外部使用量词,量词就会对括号内部的所有元素作用。
用括号改变量词的作用元素:
re.research(r"^ab+$","ab"); != none   //true
re.research(r"^ab+$","abb"); != none   //true
re.research(r"^(ab)+$","abb"); != none   //false
re.research(r"^(ab)+$","abab"); != none   //true
括号的这种能力就做分组,括号还可以配合"|"来使用,使用形式(...|...),

在括号内用|分隔子表达式形成多选分支,分支数量没有限制,整个多选分支看成单个元素,

只要其中某一个分支表达式匹配成功,整个表达式就匹配成功,都不能则失败。

多选结构,一般是(..|..),但是有时候没有括号,就相当于最外边有一个括号,把整体看成一组。

括号有了分组的功能,还有在使用括号之后,正则表达式会保存每一个分组真正的文本,

还可以通过group(num),方法来获取匹配的文本:
re.research(r"(\d{4})-(\d{2})-(\d{2})","2010-08-09");
.group(1)  //2010
.group(2)  //08
.group(3)  //09

在最外层还有一个隐式的括号,使用group(0)或group()获得:2010-08-09,

分组的编号是根据开括号的出现顺序确定的,第一个出现编号的就是1,因为始终最外层还有一个隐式的括号,它的编号才是0.
正则表达式替换:re.sub(pattern,replacement,string)
其中parttern用来匹配被替换的文本表达式,replacement是要替换的文本,String是要被替换的文本。
re.sub("[a-z]"," ","a1b2c3"); // 1 2 3
在替换中使用分组:
re.sub(r"(\d{4})-(\d{2})-(\d{2})",r"\1年\2月\3日","2010-08-09");  // 2010年08月09日
结果是将匹配的123组替换\1\2\3。
反向引用:
能应用分组的子表达式匹配的文本,一般是在匹配完成之后进行,也能在匹配的正则表达式中引用,这种功能叫做反向引用:
re.research(r"^([a-z])\1$","aa"); != none   //true
re.research(r"^([a-z])\1$","ab"); != none   //false

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!