百度百科-正则表达式
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|aa|aa匹配字符串aa结果不同,前者匹配到aa,后者匹配到两个a. 匹配到左边的以后,右边的就不会再匹配了.

特殊符号在不同组类型内的含义不同

不在任何括号内时:

  • ^匹配行首, $匹配行尾
  • egrep中, \< \>匹配单词首尾

标签: none 阅读量: 1381

添加新评论