正则表达式——文本处理的”东风导弹”

wang-possible
wang-possible
wang-possible
9
文章
0
评论
2020-08-1913:08:00 评论 291 1674字
摘要

整合之前学习成果:1.evernote、youdaonode 里面的东西;2.探索 Linux 里面的正则表达式;3.python 里面的正则表达式;4.Java 里面的正则表达式;5.通用型的正则表达式

如何做

  • 整合之前学习成果。包括 evernote、youdaonode 里面的东西。
  • 探索 Linux 里面的正则表达式
  • python 里面的正则表达式
  • Java 里面的正则表达式
  • 通用型的正则表达式

基础的部分

  1. 元字符,就是组成计算所有文本的基本元素,例如,字符、标点符号、文字,总之,就是我们能在键盘上敲出来的东西
  2. 重复,描述了让元字符重复多少次的语法
  3. 描述开头和结束的语法
  4. 描述范围的语法
  5. 或逻辑
  6. 分组
  7. 简写字符集

. 代表所有的字符

w(word) 代表所有的字母和数字,相当于 [a-zA-Z0-9_]

在下面的图中,我们看到键盘上的字母、数字和_都匹配上了。

正则表达式——文本处理的

Ww 正好相反,只要w匹配不到得,W都能匹配上

如下所示,空格和所有键盘上非字母的字符都匹配上了,不过还有一个漏网之鱼 _ ,这个哥们是在 w 里面的

正则表达式——文本处理的

d(digital) 匹配数字,类似 [0-9]

正则表达式——文本处理的

正则表达式——文本处理的

D(non-digital) 不是数字的那些字符,[^0-9]

如下图,只有数字没有匹配到

正则表达式——文本处理的

正则表达式——文本处理的

f匹配一个换页符

目前还没有找到这个字符如何


匹配一个符号,这个符号代表了一个新行的开始

如下图所示,有 7 行,
匹配到 6 个新行的开始

正则表达式——文本处理的

>
匹配一个回车字符

目前没有用到。

制表符

正则表达式——文本处理的

v 匹配一个垂直制表符

用的不多

p 匹配 CR/LF(等同于 ),用来匹配 DOS 行终止符

用的不多

 Matches, without consuming any characters, immediately between a character matched by w and a character not matched by w (in either order). It cannot be used to separate non words from words.

只能和字符(w)组合使用,表示字符的后面是 W,如下图所示,第一个 t 没有匹配上,后面都匹配上了, 不会匹配任何字符,只是作为一个参照。

正则表达式——文本处理的

B, 匹配那些  匹配不到的 w

如下图所示,后面有空格的 a 没有匹配上。不匹配任何的字符,只是做为一个参照,在下面的图中只匹配到了 a

正则表达式——文本处理的

8. 转义,一般的情况,我们可以是 来将特殊的字符转成普通字符

如下图所示,(和)是分组含义,在正则表达的保留字符,在保留字符的前面加上就可以匹配了。

正则表达式——文本处理的

s匹配所有空格字符,等同于: [
f
p{Z}]

s 代表所有不可见字符。

S,就是 [^s]

进阶的部分

1.零宽断言

正则表达式——文本处理的

有的时候,我们之前匹配到的两种字符串之间的字符串,例如:

select * from table_name where field_name = "aaa" ;

想从上面这个字符串里面匹配到 table_name。

.*(?=swhere)

正则表达式——文本处理的

(?<=froms).*(?=swhere)

2.捕获和非捕获

3.反向引用

select regexp_replace("2020-01-01" , "(20)\1" , "\1")

4.贪婪和非贪婪

5.反义

select regexp_replace("18712344321" , "(?<=\d{3})\d{4}(?=\d{4})" , "****")select regexp_replace("2020-01-01" , "(20)\1" , "")select regexp_replace("2020-01-01 00:00:00" , "[-: ]" , "")select regexp_replace("2020-01-01 00:00:00" , "[-: ]" , "")select regexp_replace("2020-01-01 00:00:00" , "(?<=\d{4}-\d{2}-\d{2}).*" ,"")select regexp_replace("00:00" , "\d{2}:00" , "" ) select regexp_replace("hello world" , "(hello|world)" , "")select regexp_extract("hello world" , "(hello|world)")

End.爱数据网专栏作者:wang-possible作者介绍:6年零售大数据工作经验,技能持续精进本文为中国统计网原创文章,未经允许禁止转载,需要转载请微信联系授权(微信号:lovedata0420)

  • 我的微信公众号
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: