正则表达式语法简介

  参考资料:

  https://www.runoob.com/regexp/regexp-tutorial.html

  凌老师课件

  新学期选修了一门自然语言处理(Natural Language Processing)课,第一周讲了三个内容:正则表达式(Regular Expression)、有限状态自动机(Finite State Automata)和分词(Word Segmentation)。这三个内容里最浅显易懂并且实用的就当属正则表达式了。本篇随笔就想着整理一下学到的东西,目的是让能够看懂RE而不是会写RE(因为根据不同的特定需求需要精心设置模式),这样以后要用到RE的时候就可以点开自己的博客,不必耗费多余的时间成本。废话少说,下面介绍:

  语法是核心:

  1. 析取

  Letters inside square brackets[]

Pattern Matches
[wW]oodchuck Woodchuck, woodchuck
[1234567890] Any digit

  Ranges[A-Z]

Pattern Matches  
[A-Z] An upper case letter Drenched Blossoms
[a-z] A lower case letter my beans were impatient
[0-9] A single digit Chapter 1:

  总结:析取的用法和方形中括号密切相关,在方形中括号内输入并列的几个单字符或者,一个Ranges即范围。代表此处的字符是“或”的意义。

 

  2. 否定

  首先要科普一下,键盘上的这个符号“^”的英文名是Carat[ˈkærət]。这个Carat表示否定仅当它是方括号的第一个字符。否定的例子和析取非常像,直接看例子(其中后两个例子是^不表示否定的情况):

Pattern Matches  
[^A-Z] Not an upper case letter Oyfn pripetchik
[^Ss] Neither 'S' nor 's' I have no exquisite reason
[e^] Either e or ^ Look here
a^b The pattern a carat b Look up a^b now

  

  3. 限定符

  主要是'?'、'*'、'+'、'.',为突出本手册的简明性,直接举几个栗子

Pattern

Matches

 

colou?r

Optional previous char

color colour

oo*h!

0 or more of previous char

oh! ooh! oooh! ooooh!

o+h!

1 or more of previous char

oh! ooh! oooh! ooooh!

baa+

 

baa baaa baaaa baaaaa

beg.n

 

begin begun begun beg3n

  总结:1)?表示前一个字符可有可无

  2)* 表示前一个字符可以有0个或者多个

  3)+ 表示前一个字符至少有一个

  4). 表示该位置可以用匹配除\n和\r之外的任何字符

 

  4. 锚号(Anchors)

  锚号即定位符,能够匹配字符串特定位置的元素。^匹配字符串首,$匹配字符串末。

Pattern Matches
^[A-Z] Palo Alto
^[^A-Za-z] 1  "Hello"
\.$ The end.
.$ The end?  The end!

  

  以上四个就是最基本的语法,现在你已经能够理解很大一部分最简单的Pattern了,更多的复杂语法可以在参考资料一的菜鸟教程里查找到,日后有时间也会更新在这里。

  2020年11月16日更新

  今天用到了正则表达式的或逻辑。举个栗子:我们想匹配 明天前、明天之前、明天。自然的想法就是:明天肯定要有,后面必须跟上之前或者前,而后面的小尾巴是可有可无的。我们就可以这样来写:

  明天(之前|前)?

  这里有两个知识点,()表示子表达式。|表示或,?号大家都知道啦。

posted @ 2020-09-21 13:37  思念殇千寻  阅读(268)  评论(0编辑  收藏  举报