腾博会官网t68

腾博会官网t68_腾博会本地客户端下载【最新官网】

资源 正则表达式的功法大全做NLP再也不怕搞不定字符串了

  在自然语言处理中,很多时候我们都需要从文本或字符串中抽取出想要的信息,并进一步做语义理解或其它处理。在本文中,作者由基础到高级介绍了很多正则表达式,这些表达式或规则在很多编程语言中都是通用的。

  正则表达式(regex 或 regexp)对于从文本中抽取信息极其有用,它一般会搜索匹配特定模式的语句,而这种模式及具体的 ASCII 序列或 Unicode 字符。从解析/替代字符串、预处理数据到网页爬取,正则表达式的应用范围非常广。

  其中一个比较有意思的地方是,只要我们学会了正则表达式的语句,我们几乎可以将其应用于多有的编程语言,包括 Java、Python、Ruby 和 Java 等。只不过对于各编程语言所支持的最高级特征与语法有细微的区别。

  使用「.」运算符需要非常小心,因为常见类或排除型字符类都要更快与精确。d、w 和s 同样有它们各自的排除型字符类,即D、W 和S。例如D 将执行与d 完全相反的匹配方法:

  为了正确地匹配,我们必须使用转义符反斜杠「」定义我们需要匹配的符号「^.[$()*+?{」,因为我们可能认为这些符号在原文本中有特殊的含义。

  注意我们同样能匹配 non-printable 字符,例如 Tab 符「t」、换行符「n」和回车符「r」

  我们已经了解如何构建正则表达式,但仍然遗漏了一个非常基础的概念:flags。

  正则表达式通常以/abc/这种形式出现,其中搜索模式由两个反斜杠「/」分离。而在模式的结尾,我们通常可以指定以下 flag 配置或它们的组合:

  捕获性圆括号 () 和非捕获性圆括弧 (?:) 对于从字符串或数据中抽取信息非常重要,我们可以使用 Python 等不同的编程语言实现这一功能。从多个分组中捕获的多个匹配项将以经典的数组形式展示:我们可以使用匹配结果的索引访问它们的值。

  如果需要为分组添加名称(使用 (?foo...)),我们就能如字典那样使用匹配结果检索分组的值,其中字典的键为分组的名称。

  注意更好的解决方案应该需要避免使用「.」,这有利于实现更严格的正则表达式:

  b 如插入符号那样表示一个锚点(它与$和^相同)来匹配位置,其中一边是一个单词符号(如w),另一边不是单词符号(例如它可能是字符串的起始点或空格符号)。

  它同样能表达相反的非单词边界「B」,它会匹配「b」不会匹配的位置,如果我们希望找到被单词字符环绕的搜索模式,就可以使用它。

  d(?=r) 只有在后面跟着“r”的时候才匹配“d”,但是“r”并不会成为整个正则表达式匹配的一部分 - Try it! (18)

  (?=r)d 只有在前面跟着“r”时才匹配“d”,但是“r”并不会成为整个正则表达式匹配的一部分 - Try it! (19)

  d(?!r) 只有在后面不跟着“r”的时候才匹配“d”,但是“r”并不会成为整个正则表达式匹配的一部分 - Try it! (20)

  正如上文所示,正则表达式的应用领域非常广,很可能各位读者在开发的过程中已经遇到了它,下面是正则表达式常用的领域: