正则表达式regexp
百度百科-正则表达式
Python正则表达式
正则表达式替换-部分内容不变
实质是用$1、$2等替代匹配内容。但要成功的话,查找中的匹配内容要有括号括起来。
如:
1、改为1.
查找:([0-9])、
替换为:$1.
greedy或non-greedy(lazy)
greedy是贪婪模式,* + ?默认都是贪婪的,这样可能会匹配不到想要的结果,比如<a><b><c>使用<.*>匹配的是<a><b><c>而不是<a>,在这三个符号后加个?可以使其变成lazy懒惰模式,如<.*?>
《精通正则表达式第三版》
系统性的学习下,确实搞明白了很多以前很模糊的内容,比百度四处找到的一知半解的文章强多了。
特别注意一点是,不同语言对正则的实现不同,这叫做favour流派不同.
四个分组
[]表示字符组, 只会匹配单个字符. 要匹配什么字符写什么字符. ASCII或者UTF-8码表中的连续字符可以用连字符-简写. 比如[0123456789]简写为[0-9],[0-9a-zA-Z]匹配所有数字字母. [-0-9!_?]其中只有第二个连字符是特殊字符, 因为特殊符号在不同组类型内的含义不同. 还可用[^0-9]匹配数字以外的字符(这儿有一个^在[]内外不同意义的例子){min,max}表示前面的匹配结果重复次数min~max次. 其他表示重复次数的包括0~1次的?,1~无穷次的+, 0~无穷次的*(...)同时表示分组和分组引用,...表示正则表达式.分组后即可以看成一个整体.()出现的次数则按\数字引用. 如出现3个()则后面可以用\1\2\3依次引用,在vscode中则使用 $1 $2 $3引用. 如果想要只分组不引用, 需要用(?:...)|前后各一个正则表达式组. 因为这个符号优先级最低,所以不用担心被先计算. 不过,aa|a和a|aa匹配字符串aa结果不同,前者匹配到aa,后者匹配到两个a. 匹配到左边的以后,右边的就不会再匹配了.
特殊符号在不同组类型内的含义不同
不在任何括号内时:
^匹配行首,$匹配行尾- egrep中,
\<\>匹配单词首尾