码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式中常用符号

时间:2016-08-01 22:49:26      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

一:

 

正则在Perl、Py森、Ruby、Java等语言中文本的正则表达式几乎是一样的

 

以前常用到的在网上都有现成的例子拿来用,比如电话格式、邮箱格式之类的。

 

但是自然语言处理中往往会根据自己的需求来制定一个表达式,如果正则的知识掌握的比较片面,在编写自然语言处理程序时可能会觉得苦恼。

 

在《自然语言处理简明教程》里面有很系统的正则表达式教程,特意总结出来消化吸收。

 

二:

 

  • 双斜线“//”

    最简单的正则表达式就是这样的,由类似于/hello world /的正则来搜索语料库中包含子字符串“hello world”的任何字符串相匹配。/e/是可以匹配到字符串hello的。

 

 

  • 中括号“[]”

    []会匹配其中的某一个字符。比如现在有嫌疑人,我们只知道他的名字可能是下面三种的某一种,分别是张伟、李伟或者黄伟。就可以使用/[张李黄]伟/来在人口数据库中匹配。

正则

匹配

模式例子

/[hH]/ello/

 

/[abc]/

 

/[1234567890]/

hello or Hello

 

‘a’或者’b’或者’c’

 

数字

Hello!”

 

“happy~”

 

1993年”

 

 

 

 

 

 

 

 

  • 连字符“-”

    用来划定范围,表示某一范围内的任何字符。比如上个例子里面的/[1234567890]/是不是感觉很不方便。如果表示为/[0-9]/就会显得精简的多。

正则

匹配

模式例子

/[A-Z]/

 

/[a-z]/

 

/[0-9]/

大写字母

 

小写字母

 

数字

Hello!”

 

happy~”

 

1993年”

 

 

 

 

 

 

 

 

  • 脱字符“^”

    如果在方括号之后有脱字符“^”,对应的模式就是否定的。

正则

匹配

模式例子

/[^A-Z]/

 

/[^aA]/

 

/[0-9]/

非大写字母

 

既不是a也不是A

 

数字

“Hello!”

 

happy~”

 

1993年”

 

 

 

 

 

 

 

 

  • 问号“?”

    比如我们在语料库中搜索诗人“李白”或者“李太白”,此时方括号就无法帮助我们,因为[]只能表示xx或者XX,但是不能表示有xx或者没xx。此时可以用“?”来表示前一个字符有或者无。

正则

匹配

/李太?白/

 

/times?/

“李白”或者“李太白”

 

time或者times

 

 

 

 

 

 

 

  • “Kleene*”

    当正则表达式用来表示重复的字符时,比如在下载文件时,出现了下面的下载进度:

99.9%

99.99%

99.999%

99.9999%

……

此时我们可以用/9*/来表示重复了“0或者若干次”的字符“9”,因此想表示出现了一次或者多次的“9”,需要用/99*/。

因此/99\.99*%/可以用来表示上述进度条。(此处的“.”需要转译,因为我们不想让他表示为通配符)

稍微复杂点:

/[10]*/可以用来表示一个二进制串,比如“1010100001110001”

 

 

  • “Kleene+”

但是我用/99*/来表示重复了“0或者若干次”的字符“9”时总觉得多写了一个“9”很不爽,这时有没有办法帮我们省掉多打一个“9”的时间呢?

/9+/就可以了~

因此使用/[10]+/来搜索语料中的二进制字符串看起来更顺手

 

 

  • 通配符“.”

哎那个马什么民,帮我把袜子洗一下。

这样说话是很不礼貌的,但是当我们确实忘了别人名字时怎么办呢?

正则表达式同样可以解决这个问题。

正则里面有一个点号,通配符(/./)可以表示任何字符。

/马.民/可以在你的班级花名册里面搜索到所有叫“马X民”的人。

 

正则

匹配

模式例子

/[beg.n]/

 

beg和n中包含一个字符的字符串

begin,beg‘n,begun

 

 

 

 

 

 

当/./和/*/或者/+/碰到时,什么神奇的事情会发生呢?

比如我们想知道有一天 马X民对黄伟做了什么事情,怎么写正则来在班级日志里面缩小搜索范围呢?

/马.民.+黄伟/就可以表示在一个长字符串里面,符合马X民bulabula黄伟的句子。

 

  • l   锚号“^”和“$”
  • l   词界“\b”“\B”
  • l   析取符“|”

正则表达式中常用符号

标签:

原文地址:http://www.cnblogs.com/kuqs/p/5727409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!