语音与语言处理——正则表达式
正则表达式:时描述文本中的符号串的一个简单类别的公式。符号串可以使任意的字母、数字、空白、表、标点符号的组合。
正则表达式的搜索需要一个试图搜索的模式以及一个待搜索的文本语料库。以下假定待搜索语料库是一个词处理系统,搜索返回结果是文档中的一行。
1.用形如/...../的形式表示一个正则表达式;
2.区分大小写;
3.用方括号表示所匹配的字符是析取的,即只表示其中的一个一个:如,/[abc]/表示a或b或c;
4.使用连字符“-”表示范围:如,/[a-z]/表示小写字母中的任意一个;
5.使用脱字符“^”,方括号可以用来表示不单独出现某个字符。注意:只有当^出现在 [ 后面第一个位置才被当做否定使用,否则仅仅表示 ^ 本身。如,[^a-z]表示不是小写字母;
6.使用?表示前面一个字符有或者无:如,/woodchucks?/表示woodchuck或者woodchucks;
7.Kleene *(cleany star)表示直接前面的 正则表达式 连续出现零次或多次:如,/[ab]*/表示零个或者多少个a或b,不是表示零个或多个右括号;
8.kleene+表示直接前面的 正则表达式 连续出现零次或多次:
9.通配符 . ,:表示与任何 单个 字符(回车符除外)相匹配的字符,如:/beg.n/可以表示beg'n或者begin或者begun;
10.锚号是一种把正则表达式锚在字符串中某一个位置的特殊符号,最普通的锚号包括,脱字符“^”、美元符号“$”:^放在正则表达式的首位,表示出现在一行的开始;^放在方括号内部首位表示不出现某个单独字符;^其他情况表示字符本身;
$表示一行是以什么结尾的,比如,/\.$/表示以 . 结尾的一行。其中必须使用转义字符\表示.而不是当做通配符。又如:/^The dog\.$/表示一行中只有"The dog.";
另,"\b"表示词界,"\B"表示非词界;
11.析取符 "|",表示或,只能取其中一个。如,/dog|cat/表示符号串是dog或者cat。注意,/twelve|nty/不能表示12或者20,因为符号序列优先级高于|,因此只能得到twelve或者nty;
12.圆括号运算符"("和")",将一个模式放入圆括号中使得该模式就像一个单独的字符来使用,而且在其中可以使用|和Kleene*等运算符,如:/twe(lve|nty)/表示twelve或者twenty;又如:/(Wow)*/表示Wow出现零次或者多次;
13.计数符{ },/{m,n}/表示前面的字符或表达式出现m到n次 ;/{m}/表示前面的字符或表达式出现m; /{m,}/表示前面的字符或表达式至少出现m次;
14.换行符\:用来引用某些特殊字符。
注意:算符具有优先次序,
圆括号 ( )
计数符 * + ? { }
序列与锚号 ^The dog\.$
析取符 |