正则表达式——单词边界

      断言

 正则表达式中的大多数结构匹配的文本会出现在最终的匹配结果中(一般用group(0)可以得到),但是也有些结构并不是真正匹配文本,而只负责判断在某个位置左/右侧的文本是否符合要求,这种结构被称为断言(assertion)。常见的断言有三类:单词边界、行起始/结束位置、环视。

  在文本处理中经常可能进行单词替换,比如吧一段文本中的 row 都替换成 line 。一般想到的是调用字符串的替换方法,直接替换row。 在不同语言中这些方法给不相同,但差别不大。

    替换前:The row we are looking for is row 10.

    替换后:The line we are looking for is line 10.

  不过,这样替换也可能会造成意想不到的后果。

    替换前:...tomorrow I will wear in brown standing in row 10 next to the rowdy guy...

    替换后:...tomorline I will wear in blinen standing in line 10 next to the linedy guy...

  不仅所有单词 row 都被替换成了 line,其他单词内部的 row 也被替换成了 line,这显然不是我们想要的结果。

  要解决这个问题,必须有办法确定单词 row,而不是字符串 row。为解决这类问题,正则表达式提供了专用的单词边界(world boundary),记为\b。它匹配的是“单词边界”位置,而不是字符。也就是说,\b能够匹配这样的位置:一边是单词字符,另一边不是单词字。

posted @ 2018-11-27 16:49  gaara724  阅读(5101)  评论(0编辑  收藏  举报