正则表达式入门
cjx最近在做爬虫的项目,急切需要在页面中抓取自己想要的内容,但是通过逻辑判断获取实在是过于复杂。很庆幸有正则表达式这个利器,很多事情都能够轻松办到,cjx之前也有了解一些关于正则表达式的知识。不过一直处于理解不彻底的状态,很难有效的自己编写一个满意的正则表达式出来。最近在网上发现有本Jeffrey E.F.Fried写的 精通正则表达式。 看了第一章后突然发现自己能写几个正则了,呵呵~~~ cjx突然有一种从屌丝升级成高富帅的感脚...下面对书上的第一章做了下总结~
行的起始和结束
或许最容易理解的元字符就是脱字符号^和美元符号$了,在检查一行文本时,^代表一行的开始,$代表结束。
读者最好养成按照字符来理解正则表达式的习惯。 例如,不要这样:
^cat 匹配以cat开头的行
而应该这样理解:
^cat 匹配的是以c作为一行的第一个字符,紧接一个a,紧接一个t的文本。
这两种理解的结果并无差异,但按照字符来解读更易于明白新遇到的正则表达式的内部逻辑。
匹配若干字符之一
如果我们需要搜索的是单词"grey",同时又不确定它是否写作"gray",就可以使用正则表达式结构体[...]。它容许使用者列出在某处期望的匹配的字符,通常被称作字符组。
所以,gr[ea]y的意思是:先找到g,跟着的是一个r,然后是一个a或者e,最后是一个y。
在字符组内部,字符租元字符 '-' 表示一个范围:
[0-9A-Z_!.?] 能够匹配一个数字、大写字母、下划线、惊态号、点号或者是问号。
排除型字符组
用[^...] 来取代 [...] 这个字符组就会匹配任何未列出的字符。例如:[^1-6] 匹配了除了1到6以外的任何字符。这个组中开头的^表示排除,所以这里列出的不是希望匹配的字符,而是不希望匹配的字符。
用点号匹配任意字符
元字符. 是用来匹配任意字符的字符组的简便写法。如果我们需要在表达式中使用一个"匹配任何字符" 的占位符,用点号就很方便。
匹配任意子表达式
元字符 | 是一个非常简洁的元字符,它的意思就"或" 。依靠它,我们能够把不同的子表达式组合一个总的表达式,而这个总的表达式又能够匹配任意的子表达式。
可选项元素
现在来看color和colour的匹配。它们的区别在于,后面的单词比前面的多一个u,我们可以用coloru?r 来解决这个问题。元字符? (也就是问号)代表可选项。把它加在一个字符的后面,就表示此处容许出现这个字符,不过它的出现并非匹配成功的必要条件。
其他量词:重复出现
+(加号)和*(星号)的作用与问号类似。元字符+ 表示之前紧邻的元素出现一次或多次,而* 表示之前紧邻的元素出现任意多次,或者不出现。
接下来看类似
这样的TAG,它表示一条高度为14的水平线。此外HR 与SIZE 之间必须有一个空格,而等号两边可以没有空格。于是若要找到网页中这样的HR,表达式既被写成
,有的时候HR的SIZE值往往是可变的,还有有可能不存在SIZE属性。那么表达式又可以被改写成
。哇哦,真是太神奇了。
括号及反向引用
到目前为止,我们已经见过括号的两种用途:1.限制多选项的范围;2.将若干字符组合为一个单元,受问号或星号之类量词作用。现在我要介绍括号的另外一种用途即反向引用,虽然它在egrep中并不常见(不过流行的GNU版本确实支持这一功能),但在其他工具软件中很常见。
在支持反向引用的工具软件中,括号能够"记忆"其中的子表达式匹配的文本,不论这些文本是什么,元字符序列\1 都能够记住它们。
当然,在一个表达式中我们可以使用多个括号。再用\1、\2、\3等来表示第一、第二、第三组括号匹配的文本。括号是按照开括号'(' 从左到右的出现顺序来进行的,所以 ([a-z])([0-9])\1\2 中的\1代表[a-z] 匹配的内容,而\2 代表[0-9]匹配的内容。
神奇的转义
就是有的时候,我们可能需要匹配一些.+*?等符号,但是同时发现他们又是元符号。于是我们可以在它们的前面加上一个\ 转义符来实现这些特殊元符号的匹配。
一些有用的简记
\t 制表符
\n 换行符
\r 回车符
\s 任何空白字符,如空格、换行、tab缩进等所有的空白符
\S 除\s 之外的任何字符
\w [a-zA-Z0-9] 在\w+ 中非常有用,可以用来匹配一个单词
\W 除\w 之外的任何字符
\d [0-9],即数字
\D 除\d 外的任何字符,即[^0-9]

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Diffusion不仅可以更好地模仿,而且可以进行「创作」。扩散模型(DiffusionModel)是一种图像生成模型。与此前AI领域大名鼎鼎的GAN、VAE等算法,扩散模型另辟蹊径,其主要思想是一种先对图像增加噪声,再逐步去噪的过程。其中如何去噪还原原图像是算法的核心部分。最终算法能够从一张随机的噪声图像中生成图像。近年来,生成式AI的惊人增长将文本转换为图像生成、视频生成等领域的许多令人兴奋的应用提供了支持。这些生成工具背后的基本原理是扩散的概念,这是一种特殊的采样机制,克服了以前的方法中被

Kimi:一句话,十几秒钟,一份PPT就新鲜出炉了。PPT这玩意儿,可太招人烦了!开个碰头会,要有PPT;写个周报,要做PPT;拉个投资,要展示PPT;就连控诉出轨,都得发个PPT。大学更像是学了个PPT专业,上课看PPT,下课做PPT。或许,37年前丹尼斯・奥斯汀发明PPT时也没想到,有一天PPT竟如此泛滥成灾。吗喽们做PPT的苦逼经历,说起来都是泪。「一份二十多页的PPT花了三个月,改了几十遍,看到PPT都想吐」;「最巅峰的时候,一天做了五个PPT,连呼吸都是PPT」;「临时开个会,都要做个

北京时间6月20日凌晨,在西雅图举办的国际计算机视觉顶会CVPR2024正式公布了最佳论文等奖项。今年共有10篇论文获奖,其中2篇最佳论文,2篇最佳学生论文,另外还有2篇最佳论文提名和4篇最佳学生论文提名。计算机视觉(CV)领域的顶级会议是CVPR,每年都会吸引大量研究机构和高校参会。据统计,今年共提交了11532份论文,2719篇被接收,录用率为23.6%。根据佐治亚理工学院对CVPR2024的数据统计分析,从研究主题来看,论文数量最多的是图像和视频合成与生成(Imageandvideosyn

我们知道LLM是在大规模计算机集群上使用海量数据训练得到的,本站曾介绍过不少用于辅助和改进LLM训练流程的方法和技术。而今天,我们要分享的是一篇深入技术底层的文章,介绍如何将一堆连操作系统也没有的「裸机」变成用于训练LLM的计算机集群。这篇文章来自于AI初创公司Imbue,该公司致力于通过理解机器的思维方式来实现通用智能。当然,将一堆连操作系统也没有的「裸机」变成用于训练LLM的计算机集群并不是一个轻松的过程,充满了探索和试错,但Imbue最终成功训练了一个700亿参数的LLM,并在此过程中积累

标题:技术入门者必看:C语言和Python难易程度解析,需要具体代码示例在当今数字化时代,编程技术已成为一项越来越重要的能力。无论是想要从事软件开发、数据分析、人工智能等领域,还是仅仅出于兴趣学习编程,选择一门合适的编程语言是第一步。而在众多编程语言中,C语言和Python作为两种广泛应用的编程语言,各有其特点。本文将对C语言和Python的难易程度进行解析

机器之能报道编辑:杨文以大模型、AIGC为代表的人工智能浪潮已经在悄然改变着我们生活及工作方式,但绝大部分人依然不知道该如何使用。因此,我们推出了「AI在用」专栏,通过直观、有趣且简洁的人工智能使用案例,来具体介绍AI使用方法,并激发大家思考。我们也欢迎读者投稿亲自实践的创新型用例。视频链接:https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ最近,独居女孩的生活Vlog在小红书上走红。一个插画风格的动画,再配上几句治愈系文案,短短几天就能轻松狂揽上

PHP正则表达式验证:数字格式检测在编写PHP程序时,经常需要对用户输入的数据进行验证,其中一个常见的验证是检查数据是否符合指定的数字格式。在PHP中,可以使用正则表达式来实现这种验证。本文将介绍如何使用PHP正则表达式来验证数字格式,并提供具体的代码示例。首先,让我们看一下常见的数字格式验证要求:整数:只包含数字0-9,可以以正负号开头,不包含小数点。浮点

检索增强式生成(RAG)是一种使用检索提升语言模型的技术。具体来说,就是在语言模型生成答案之前,先从广泛的文档数据库中检索相关信息,然后利用这些信息来引导生成过程。这种技术能极大提升内容的准确性和相关性,并能有效缓解幻觉问题,提高知识更新的速度,并增强内容生成的可追溯性。RAG无疑是最激动人心的人工智能研究领域之一。有关RAG的更多详情请参阅本站专栏文章《专补大模型短板的RAG有哪些新进展?这篇综述讲明白了》。但RAG也并非完美,用户在使用时也常会遭遇一些「痛点」。近日,英伟达生成式AI高级解决
