共计 3384 个字符,预计需要花费 9 分钟才能阅读完成。
作者:Amit Chaudhary
译者:前端小智
起源: dev
点赞再看 ,微信搜寻【大迁世界】 关注这个没有大厂背景,但有着一股向上踊跃心态人。本文
GitHub
https://github.com/qq44924588… 上曾经收录,文章的已分类,也整顿了很多我的文档,和教程材料。**
最近开源了一个 Vue 组件,还不够欠缺,欢送大家来一起欠缺它,也心愿大家能给个 star 反对一下,谢谢各位了。
github 地址:https://github.com/qq44924588…
双 12 阿里服务器 27
块,通用点击这里购买能够找我返现 30,等于 27
块就能买到了,只限新用户,能够用家人的手机号购买!
在 NLP 中,依据模式查看文本或从文本中提取与特定模式匹配的内容是常见的工作。正则表达式是实现这一点的弱小帮手。
NLP (Natural Language Processing) 是人工智能(AI)的一个子畛域。
只管功能强大,然而正则表达式常常令人生畏,因为它有许多咱们须要记住的命令,而且在简单的构造中,还须要有肯定的逻辑能力。
在这篇文章中,次要用示图的形式来演示正则表达式的各种概念。目标当然是帮忙大家也包含我本人建设一个对于正则表达式的心智模型。
心智模型
咱们先从一个简略的例子开始,在这个例子中,咱们试图在文本中找到 cool
这个单词。
应用正则,咱们只需输出单词 'cool'
作为模式,它就会匹配该单词。
'cool'
正则表达式与咱们冀望的单词 'cool'
匹配时,它的操作形式不是单词级别而是字符级别,这是咱们须要理清的一个点。
留神点: 正则表达式在字符级别工作,而不是单词级别。
这意味着正则表达式 'cool'
也将与以下句子匹配。
根本构建基块
当初咱们曾经了解了关键点,接下来咱们理解一下如何应用正则表达式匹配简略字符。
特定字符
咱们能够在正则表达式中指定字符,它将匹配文本中的所有实例。
例如,上面给出的正则表达式将匹配文本中所有 'a'
实例:
'a'
也能够应用从 0
到9
的任何数字,来匹配数字。
'3'
请留神,默认状况下,正则表达式辨别大小写,因而以下正则表达式不匹配任何内容。
'A'
空格字符
咱们能够应用非凡的转义序列来检测特殊字符,例如空格和换行符。
除了上述常见的,咱们还有:
\\r
回车\\f
换页\\e
可执行模式
特殊字符
正则表达式提供了一堆内置的特殊字符,这些字符能够一次匹配一组字符,这些字符以反斜杠 \\
结尾。
模式:\\d
它匹配 0
到9
之间的数字。
留神,匹配项是一位数。因而,咱们在上面有 4 个不同的匹配项,而不是单个数字18.04
。
模式:\\s
它匹配任何空格字符(空格、制表符或换行符)。
模式:\\w
它匹配任何小写字母(a
到 z
),大写字母(A
到Z
),数字(0
到9
)和下划线。
模式:.
它匹配除换行符(\\n
)以外的任何字符。
let str = 'line 1\nline2'
str.match(/./g)
// 后果:["l", "i", "n", "e", "","1","l","i","n","e","2"]
模式:否定
如果我咱们应用上述模式的大写模式,则示意他们否定的一面。
例如,如果 \\d
匹配从 0
到9
的任何数字,则 \\D
将匹配 0
到9
之外的任何数字。
字符集
字符集模式以 [
开始,以]
完结,并匹配括号括起来的字符。例如,以下模式匹配任何字符'a'
, 'e'
, 'i'
, 'o'
和 'u'
。
咱们也能够应用以下模式来代替 \\d
的性能。
除了指定所有数字,咱们还能够应用连字合乎 -
仅需指定开始和完结数字。因而,咱们能够用 [0-9]
代替[0123456789]
:
例如,[2-4]
可用于匹配 2
到4
(即 2
或3
或4
)之间的任何数字。
咱们能够在括号内应用下面讲的特殊字符。例如,匹配 0
到9
之间的任何数字或空白字符:
上面,列出了一些通用模式及其含意。
锚点
正则表达式还具备非凡的处理程序,以使模式仅在字符串的结尾或结尾时才匹配。
咱们只能应用 ^
字符来匹配以指定开始的模式。例如
同样,咱们能够在字符后应用 $
字符,示意以指定字符结尾。例如:
本义元字符
思考一种状况,咱们要齐全匹配单词 "Mr. Stark"
。
如果咱们想用这样的格局 Mr. Stark
来匹配,那么它会产生意想不到的成果。因为咱们晓得 .
在正则表达式中有非凡的意义。
因而,如果咱们想是准确匹配字符自身,则须要对非凡的元字符 (如.
、$
等)进行本义。
上面是元字符列表,如果间接应用它们,记住要对它们进行本义。
^ $ . * + ? {} [] \ | ()
反复类
当初咱们能够对任何字符进行模式匹配,接着,咱们来接触较简单一点的模式。
笨的形式来匹配反复字符
仅应用到目前为止所学的常识,童稚的办法就是反复这种模式。例如,咱们能够通过反复字符级模式来匹配两位数字。
\d\d
量词
正则表达式提供非凡的量词来指定其后面字符的不同反复类型。
固定反复
咱们能够应用 {...}
量词来指定模式应反复的次数。
例如,能够将先前用于匹配两位数字的模式批改为:
咱们还能够应用雷同的量词指定反复范畴。例如,要匹配 2
位数或者 4
位数字,能够应用以下模式:
当利用于句子时,它将同时匹配 4 位数字和 2 位数字。
留神 最小和最大计数之间不应该有任何空格,例如,
\\d{2, 4}
不工作。
灵便的量词
正则表达式还提供了量词 *
,+
和?
应用它能够指定字符的灵便反复。
?
字符示意匹配 0 次或者 一次
例如,假如咱们想匹配单词 “sound”
和“sounds”,其中“s”是可选的。咱们能够应用 ?
量词。
+
字符示意匹配 一 次或者屡次
例如,咱们能够应用正则 \\d+
找到任意长度的数字。
*
字符示意匹配 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'>
应用 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 和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复 福利,即可看到福利,你懂的。