可视化正则表达式教程

做者:Amit Chaudhary
译者:前端小智
来源: dev
点赞再看,微信搜索 【大迁世界】关注这个没有大厂背景,但有着一股向上积极心态人。本文 GitHub https://github.com/qq44924588... 上已经收录,文章的已分类,也整理了不少个人文档,和教程资料。**

最近开源了一个 Vue 组件,还不够完善,欢迎你们来一块儿完善它,也但愿你们能给个 star 支持一下,谢谢各位了。前端

github 地址:https://github.com/qq44924588...vue

双12阿里服务器27块,通用点击这里购买能够找我返现30,等于27块就能买到了,只限新用户,能够用家人的手机号购买!git

在NLP中,根据模式检查文本或从文本中提取与特定模式匹配的内容是常见的任务。正则表达式是实现这一点的强大帮手。github

NLP (Natural Language Processing) 是人工智能(AI)的一个子领域。

尽管功能强大,可是正则表达式常常使人生畏,由于它有许多咱们须要记住的命令,并且在复杂的结构中,还须要有必定的逻辑能力。面试

在这篇文章中,主要用示图的方式来演示正则表达式的各类概念。 目的固然是帮助你们也包括我本身创建一个关于正则表达式的心智模型。正则表达式

心智模型

咱们先从一个简单的例子开始,在这个例子中,咱们试图在文本中找到cool这个单词。express

clipboard.png

使用正则,咱们只需输入单词'cool'做为模式,它就会匹配该单词。服务器

'cool'

正则表达式与咱们指望的单词'cool'匹配时,它的操做方式不是单词级别而是字符级别,这是咱们须要理清的一个点。微信

注意点:正则表达式在字符级别工做,而不是单词级别。

clipboard.png

这意味着正则表达式'cool'也将与如下句子匹配。函数

clipboard.png

基本构建基块

如今咱们已经理解了关键点,接下来咱们了解一下如何使用正则表达式匹配简单字符。

特定字符

咱们能够在正则表达式中指定字符,它将匹配文本中的全部实例。

例如,下面给出的正则表达式将匹配文本中全部'a'实例:

'a'

clipboard.png

也可使用从09的任何数字,来匹配数字。

'3'

clipboard.png

请注意,默认状况下,正则表达式区分大小写,所以如下正则表达式不匹配任何内容。

'A'

clipboard.png

空格字符

咱们可使用特殊的转义序列来检测特殊字符,例如空格和换行符。

clipboard.png

除了上述常见的,咱们还有:

  • \\r 回车
  • \\f 换页
  • \\e 可执行模式

特殊字符

正则表达式提供了一堆内置的特殊字符,这些字符能够一次匹配一组字符,这些字符以反斜杠\\开头。

模式:\\d

它匹配09之间的数字。

clipboard.png

注意,匹配项是一位数。 所以,咱们在下面有4个不一样的匹配项,而不是单个数字18.04

clipboard.png

模式:\\s

它匹配任何空格字符(空格、制表符或换行符)。

clipboard.png

模式:\\w

它匹配任何小写字母(az),大写字母(AZ),数字(09)和下划线。

clipboard.png

模式:.

它匹配除换行符(\\n)之外的任何字符。

clipboard.png

let str = 'line 1\nline2'
str.match(/./g)

// 结果:["l", "i", "n", "e", " ", "1", "l", "i", "n", "e", "2"]

模式:否认

若是我咱们使用上述模式的大写形式,则表示他们否认的一面。

例如,若是\\d匹配从09的任何数字,则\\D将匹配09以外的任何数字。

clipboard.png

字符集

字符集模式以[ 开始,以]结束,并匹配括号括起来的字符。例如,如下模式匹配任何字符'a', 'e', 'i', 'o''u'

clipboard.png

咱们也可使用如下模式来代替\\d的功能。

clipboard.png

除了指定全部数字,咱们还可使用连字符合-仅需指定开始和结束数字。 所以,咱们能够用[0-9]代替[0123456789]

clipboard.png

例如,[2-4]可用于匹配24(即234)之间的任何数字。

clipboard.png

咱们能够在括号内使用上面讲的特殊字符。 例如,匹配09之间的任何数字或空白字符:

clipboard.png

下面,列出了一些通用模式及其含义。

clipboard.png

锚点

正则表达式还具备特殊的处理程序,以使模式仅在字符串的开头或结尾时才匹配。

咱们只能使用 ^ 字符来匹配以指定开始的模式。例如

clipboard.png

一样,咱们能够在字符后使用$字符 ,表示以指定字符结尾。 例如:

clipboard.png

转义元字符

考虑一种状况,咱们要彻底匹配单词 "Mr. Stark"

若是咱们想用这样的格式 Mr. Stark 来匹配,那么它会产生意想不到的效果。由于咱们知道.在正则表达式中有特殊的意义。

clipboard.png

所以,若是咱们想是精确匹配字符自己,则须要对特殊的元字符(如.$等)进行转义。

clipboard.png

下面是元字符列表,若是直接使用它们,记住要对它们进行转义。

^ $ . * + ? { } [ ] \ | ( )

重复类

如今咱们能够对任何字符进行模式匹配,接着,咱们来接触较复杂一点的模式。

笨的方式来匹配重复字符

仅使用到目前为止所学的知识,幼稚的方法就是重复这种模式。 例如,咱们能够经过重复字符级模式来匹配两位数字。

\d\d

clipboard.png

量词

正则表达式提供特殊的量词来指定其前面字符的不一样重复类型。

固定重复

咱们可使用{...}量词来指定模式应重复的次数。

clipboard.png

例如,能够将先前用于匹配两位数字的模式修改成:

clipboard.png

咱们还可使用相同的量词指定重复范围。 例如,要匹配2位数或者4位数字,可使用如下模式:

clipboard.png

当应用于句子时,它将同时匹配4位数字和2位数字。

clipboard.png

注意 最小和最大计数之间不该该有任何空格,例如, \\d{2, 4}不工做。

灵活的量词

正则表达式还提供了量词*+? 使用它能够指定字符的灵活重复。

? 字符表示匹配 0 次或者 一次

clipboard.png

例如,假设咱们想匹配单词“sound”和“sounds”,其中“s”是可选的。咱们可使用?量词。

clipboard.png

+ 字符表示匹配 一 次或者屡次

例如,咱们可使用正则 \\d+找到任意长度的数字。

clipboard.png

* 字符表示匹配 0 次或者屡次

在Python中的用法

Python在标准库中提供了一个名为"re"的模块来使用正则表达式。

对原始字符串的需求

要在Python中指定正则表达式,咱们在r以前建立原始字符串

pattern = r'\d'

为了理解为何咱们在前面加上r,咱们尝试打印不带**r**的表达式\\t

>>> pattern = '\t'
>>> print(pattern)

能够看到,当咱们不使用原始字符串时,字符串\\t在Python中被视为制表符的转义字符。

如今咱们把它转换成原始字符串,咱们会获得咱们指定的任何东西

>>> pattern = r'\t'
>>> print(pattern)
\t

使用 re 模块

要使用re模块,咱们须要导入它:

import re

1. re.findall

这个函数容许咱们以字符串列表的形式得到全部匹配项。

import re
re.findall(r'\d', '123456')

// ['1', '2', '3', '4', '5', '6']

2. re.match

此函数在字符串开头搜索模式,并将第一个匹配项做为匹配对象返回。若是没有找到该模式,则返回None

import re

match = re.match(r'batman', 'batman is cool')
print(match)

// <re.Match object; span=(0, 6), match='batman'>

clipboard.png

使用match对象,咱们能够将匹配的文本做为

print(match.group())

// batman

在咱们的模式不在句子开头的状况下,咱们将不会得到任何匹配。

import re

match = re.match(r'batman', 'The batman is cool')
print(match)

// None

3. re.search

此函数还能够查找模式的第一次出现,但该模式能够出如今文本中的任何位置。若是没有找到该模式,则返回None

import re

match = re.search(r'batman', 'the batman is cool')
print(match.group())


// batman

今天就跟你们分享到这里,咱们下期再见,记得三连哦。


代码部署后可能存在的BUG无法实时知道,过后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给你们推荐一个好用的BUG监控工具 Fundebug

原文:https://dev.to/amitness/a-vis...

交流

文章每周持续更新,能够微信搜索「 大迁世界 」第一时间阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了不少个人文档,欢迎Star和完善,你们面试能够参照考点复习,另外关注公众号,后台回复福利,便可看到福利,你懂的。

相关文章
相关标签/搜索