Best of VIM Tips(译注) - 连载3 查找(b)

Vim正则表达式实战
本文通过实例详细介绍了如何在Vim编辑器中利用正则表达式进行高效搜索,涵盖了基本语法、特殊字符以及复杂的匹配模式。

这一节主要是在查找中使用正则表达式。VIM提供了强大的正则表达式机制,灵活的应用它可以显著的提高工作效率。

正则表达式的帮助入口为“:help pattern”。

 

[翻译]

 

/^joe.*fred.*bill/          : normal

                              标准的正则表达式

 

[注解]

 

                                                                                                    :help /^

                                                                                                    :help /.

                                                                                                    :help /star

这是一个最简单的正则表达式,查找行首为joe,包含fredbill单词的行

其中,“.”代表任意字符,“*”表示在它之前的字符重复任意次(包括0次),所以“.*”的含义就是任意个任意字符。“*”可以表示0次匹配,也就是它前面的字符允许不出现。

^”字符表示该匹配由行首位置开始。

 

[翻译]

 

/^[A-J]/+/                  : search for lines beginning with one or more A-J

                              查找以一个或多个 A-J 中的字母开头的行

 

[注解]

 

                                                                                                    :help /[]

                                                                                                    :help //+

这个正则表达式匹配以一个或多个A-J中的字母开头的行。

它用到了集合表示法“[]”。任何出现在“[]”中的字母都符合匹配。如果“[]”中的第一个字符是“^”,则表示“[]”中的字母都不符合匹配。

/+”表示它前面的字符出现一次或多次,它与“*”的区别在于“*”允许它前面的字符出现0次。

 

[翻译]

 

/begin/_.*end               : search over possible multiple lines

                              查找在 begin end 两个单词之间尽可能多的行

 

[注解]

 

                                                                                                    :help //_.

这个正则表达式可以跨行匹配。一般情况下正则表达式只在一行内进行匹配,但如果使用了“/_.”这类标记,它就可以在多行间进行匹配。

/_.”匹配任意单个字符和换行符,它于“.”的区别在于它可以匹配换行符。

 

[翻译]

 

/fred/_s*joe/i              : any whitespace including newline

                              查找在 fred joe 两个单词之间任意多的空白字符,包括新

 

[注解]

 

                                                                                                    :help //s

                                                                                                    :help //_s

这个正则表达式跨行空白字符。所谓空白字符,包括空格以及制表符。

/_s”匹配空白字符和换行符。“/s”则只匹配空白字符。

现在我们深入一点,“/s”匹配空白字符,而“/_s”匹配空白字符和换行符;“.”匹配任意单个字符,而“/_.”匹配任意单个字符和换行符。总结出规律没有?!

该表达式最后的字符i,没有找到其具体含义。

 

[翻译]

 

/fred/|joe                  : Search for FRED OR JOE

                              查找 fred joe

[注解]

 

                                                                                                    :help //bar

这个正则表达查找符合fred或符合joe

/|”用来连接正则表达式的两个子式,两个子式间是或的关系。

 

[翻译]

 

/.*fred/&.*joe              : Search for FRED AND JOE in any ORDER!

                              查找同时包含 FRED JOE 的行,不分前后顺序

[注解]

 

                                                                                                    :help //&

这个正则表达式查找“.*joe”,但同时要求这一行中必须包含“.*fred”。

/&”用来连接正则式的两个子式。它匹配最后一个子式,但要求之前的子式也在同样的位置被匹配,也就是两个子式间是与的关系。这个操作符理解起来可能有些难。

注意,如果你把上面的查找换成“/fred/&joe”,那么它不能匹配到任何东西。因为任何匹配joe的字串,在j的位置,都不可能匹配f

C语言中的&|符类似,VIM中的“/&”优先级要高于“/|”,所以会先计算“/&”子式再计算“/|”子式。

 

[翻译]

 

//<fred/>/i              : search for fred but not alfred or frederick

                              查找 fred, 而不是 alfred 或者 frederick,也就是全字匹

[注解]

 

                                                                                                    :help //<

                                                                                                    :help //>

                                                                                                    :help 'iskeyword'

 

这个正则表达式匹配完整的fred单词。在VIM中,'iskeyword'选项定义了哪些字符是组成单词的字符。这个正则式要求在fred之前的字符,以及在fred之后的字符,都不在'iskeyword'选项中。

/<”匹配单词的起点,“/>”匹配单词的终点。

 

[翻译]

 

//</d/d/d/d/>            : Search for exactly 4 digit numbers

                              查找4个数字的全字匹配

[注解]

 

                                                                                                    :help //d

这个正则式全字匹配4个数字。

/d”匹配0-9间的任一数字。

 

[翻译]

 

//D/d/d/d/d/D               : Search for exactly 4 digit numbers

                              查找4个数字的全字匹配

 

[注解]

 

                                                                                                    :help //D

这个正则式和上面一样,也全字匹配4个数字。

/D”匹配非数字。

 

[翻译]

 

//</d/{4}/>              : same thing

                              同上

 

[注解]

 

                                                                                                    :help //{

这个正则式和上面两个一样,全字匹配4个数字。

/{4}”表示匹配它前面的字符4次。

 

[翻译]

 

//([^0-9]/|^/)%.*%          : Search for absence of a digit or beginning of line

                              查找

[注解]

 

                                                                                                    :help //(

这个正则式组合使用了前面介绍的操作符,理解起来有些复杂。

/( /)”的作用是把括号里面的内容当做一个单一的元字符。括号里可以包含正则式,但用这种转义括号包起来时,会把这个正则式当做一个元字符。例如,“*”字符的含义它前面的字符出现任意次。如果“*”用在“/( /)”后面时,就会表示“/( /)”中的正则式出现任意次,也就是把“/( /)”中的内容当做一个元字符来处理。

所以对上面的这个表达式来讲,会把“/( /)”中的表达式和“%.*%”结合起来进行查找,而“/( /)”中的表达式是或的关系,因此这个正则式实际可以拆分为下面两个正则式的或运算:“[^0-9]%.*%”及“^%.*%”。

这样拆分后,我们就很容易搞懂它的含义了。第一个正则式查找%前为非数字,在它后面还有一个%的匹配;第二个正则式查找行首是%,它后面还有另外一个%的匹配;这两个表达式再进行或运算,也就是查找满足第一个正则式的匹配,或者满足第二个正则式的匹配,满足两者中任一个即匹配成功。

[参考文档]

1. http://www.rayninfo.co.uk/vimtips.html

2. http://groups.google.com/group/Vim-cn/msg/f72fba0645955101?

3. VIM帮助文件

4. http://vimcdoc.sourceforge.net/

 

[尾记]

本文可以自由应用于非商业用途。转载请注明出处。

原文链接:http://blog.csdn.net/easwy

数据集概述 本数据集用于情感分析,主要针对Yelp评论,通过比较两种先进的模型——Hugging Face的bert-base-multilingual-uncased和cardiffnlp/twitter-roberta-base-sentiment-latest来分析评论中的情感表达。 模型使用 BERT Multilingual Uncased: 适用于理解多种语言,特别适合处理Yelp评论中多样化的语言特性。 Twitter RoBERTa: 专门针对情感分析进行微调,擅长理解英语情感的细微差别。 构建方式 Yelp Reviews Dataset的构建基于Yelp平台上用户提交的评论数据。该数据集通过爬虫技术从Yelp网站上抓取,涵盖了多个国家和地区的餐厅、服务和商品的评论。数据收集过程中,确保了评论的完整性和真实性,同时对文本进行了预处理,包括去除HTML标签、特殊字符和停用词,以保证数据的质量和可用性。 特点 Yelp Reviews Dataset的特点在于其广泛的地理覆盖和多样化的评论内容。数据集包含了数百万条评论,涵盖了从星级评价到详细文本反馈的多种信息形式。此外,该数据集还提供了用户、商家和评论之间的关联信息,使得研究者可以进行多维度的分析。评论的情感倾向和语言风格也为自然语言处理和情感分析提供了丰富的素材。 使用方法 Yelp Reviews Dataset可用于多种研究目的,包括但不限于情感分析、用户行为研究、推荐系统构建和市场分析。研究者可以通过分析评论文本,提取用户的情感倾向和偏好,进而优化推荐算法或改进服务质量。此外,该数据集还可用于训练和验证自然语言处理模型,如情感分类器和文本生成模型。使用时,建议根据具体研究需求选择合适的子集和特征进行分析。 背景与挑战 背景概述 Yelp Reviews Dataset,作为在线评论平台Yelp的核心
本项目旨在开发一个基于Python的卷积神经网络(CNN)人脸识别系统,用于检测驾驶员的疲劳状态并及时发出预警。该系统主要通过分析驾驶员的面部特征,如打哈欠、眨眼和点头等行为,来判断驾驶员是否处于疲劳状态,从而提高驾驶安全性。 开发环境 IDE: PyCharm 编程语言: Python 3.6 算法: 卷积神经网络(CNN) 系统功能 本系统主要分为三个部分: 打哈欠检测:通过检测驾驶员的嘴巴张合程度来判断是否打哈欠。 眨眼检测:通过分析驾驶员的眼睛开合度和眨眼频率来判断是否疲劳。 点头检测:通过检测驾驶员的头部姿态变化来判断是否疲劳。 疲劳检测原理 人在疲倦时通常会出现以下两种状态: 眨眼:正常情况下,人的眼睛每分钟大约会眨动10-15次,每次眨眼大约0.2-0.4秒。当人疲劳时,眨眼次数会增加,速度也会变慢。 打哈欠:疲劳时,人的嘴巴会张大并保持一定状态。 因此,通过检测眼睛的开合度、眨眼频率以及嘴巴的张合程度,可以判断一个人是否处于疲劳状态。 检测工具 本项目使用dlib库进行人脸检测和关键点定位。shape_predictor_68_face_landmarks.dat是一个用于人脸68个关键点检测的模型库,能够方便地进行人脸检测和应用。 眨眼计算原理 计算眼睛的宽高比(Eye Aspect Ratio, EAR)是判断眨眼状态的关键。当人眼睁开时,EAR值较大;当人眼闭合时,EAR值较小。通过实时计算EAR值的变化,可以判断驾驶员是否在眨眼。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值