模式匹配

Python正则表达式【转载】

时光毁灭记忆、已成空白 提交于 2019-12-01 16:10:56
原作者: LouieZhang 原文出处: https://www.cnblogs.com/LouieZhang/p/7399836.html 0x00 简介 正则表达式就是描述字符串排列的一套规则。利用正则表达式可以做很多事情,主要用于字符串的匹配 在实际项目中,我们经常需要找到某一类符合某种格式的信息,此时,我们可以观察这些数据的规律,然后将这些数据的格式规律用正则表达式形式描述出来,然后利用正则表达式函数进行相应的处理即可。 本节主要为大家介绍正则表达式怎么去写,将从原子、原子符、模式修正符、贪婪模式与懒惰模式等方面介绍 0x01 原子 原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子 1.1 普通字符作为原子 我们可以使用一些普通的字符,比如数字,大小写字母,下划线等都可作为原子使用. 如下程序中,‘yue’作为原子使用,这里有三个原子,分别是y,u,e import re pattern = "yue"#yue作为原子使用,有三个原子,分别是y,u,e string = "http://yum.iqianyue.com" resultl = re.search(pattern,string)#在string中匹配正确的正则表达式,若匹配成功,将匹配结果返回给变量result print(resultl) <_sre.SRE_Match object;

Vim 实用技术,第 1 部分: 实用技巧

时光怂恿深爱的人放手 提交于 2019-12-01 15:18:26
0. Vim 简介 作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱。不过,也许就是因为 Vim 的功能太强大了,要真正用好 Vim 并不容易。本文作者在多年的实际使用中逐渐掌握了一些实用技术,在此介绍给大家。——本文并不企图对 Vim 作全面而系统的介绍,但也绝非零星地点到即止;而是希望通过介绍一些重要特性和提供相关参考信息,引起大家的兴趣,去深入挖掘其能力,真正把这一强大的工 具用好。 下面首先对 Vim 做一下最基本的介绍,并给出一些参考信息,以方便对 Vim 不熟悉的读者也能够理解并自己查阅进一步信息。 与大部分其它编辑器不同,进入 Vim 后,缺省状态下键入的字符并不会插入到所编辑的文件之中。Vim 的模式(mode,可以简单地理解为“状态”)概念非常重要。需要知道,Vim 有以下几个模式: ●正常(normal)模式,缺省的编辑模式;下面如果不加特殊说明,提到的命令都直接在正常模式下输入;任何其它模式中都可以通过键盘上的 Esc 键回到正常模式。 ●命令(command)模式,用于执行较长、较复杂的命令;在正常模式下输入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可进入该模式;命令模式下的命令要输入回车键(Enter)才算完成。 ●插入(insert)模式,输入文本时使用;在正常模式下键入“i”

newLISP 正则表达式简介

∥☆過路亽.° 提交于 2019-12-01 09:35:32
newLISP 正则表达式规范 newLISP 的正则表达式接口是从 PCRE 标准函数库中获得的,继承了大部分的 功能,但不是完全相同。 在 newLISP 中表示一个正则表达式的时候,请使用大括号包围的方式,因为用双引号的方式,转义符号表示繁琐,行为也有一些怪异的地方。 (regex {\Q$\E} "$") --> ("$" 0 1) (regex "\Q$\E" "$") --> nil (regex "\\Q$\\E" "$") --> ("$" 0 1) 支持字节和 utf-8 字符的处理 newLISP 支持基于字节和 utf-8 字符的正则表达式处理。只有支持 utf-8 的 newLISP 版本才能处理 utf-8 字符串。 当启动一个 REPL 时,出现包含 UTF-8 提示的版本才支持 utf-8 的字符处理: newLISP v.10.6.0 32-bit on Win32 IPv4/6 UTF-8 libffi, options: newlisp -h > (regex {大象} "大象无形" 2048) ("大象" 0 6) > (regex {大象} "大象无形") ("大象" 0 6) 在 utf-8 版本的 newLISP 中,regex 的默认正则标识是 2048, 而普通版本的默认正则标识是 0. > (regex {[a-z]+}

swift模式和模式匹配

拈花ヽ惹草 提交于 2019-12-01 09:07:16
模式和模式匹配 模式: 代表单个或者复合值得结构,也就是说模式不是一个特定的值,它是一种抽象的结构, 【一句话,不是特指,是泛指】 。这样就可以用模式来匹配各种各样的值。 例如:(x,y)可以匹配元祖(1.2),以及任何包含两个元素的元组。 除了利用模式匹配一个值以外,你可以从复合值中提取出部分或全部值,然后把各个部分的值和一个常量或变量绑定起来。 swift中的模式分为两类: 一种能匹配任何类型的值,另一种在运行时匹配某个特定的值,可能会失败。 第一种模式用于结构简单变量,常量和可选绑定中的值。此类模式包括通配符模式,标识符模式,以及包含前两种模式的值绑定模式和元组模式。你可以为这类模式指定一个类型标注,从而限制它们只能匹配某种特定类型的值。 第二种模式用于全局模式匹配。这种情况下,你试图匹配的值在运行时可能不存在。此类模式包括枚举用例模式,可选模式,表达式模式和类型转换模式。你在switch语句的case标签中,do语句的catch 子句中,或者再if,while,guard,for-in语句的case条件语句中使用这类模式。 模式匹配 通配符模式 ( wildcard pattern) 通配符模式由一个下划线(_)构成,用于匹配并忽略任何值,当你想忽略被匹配的值时可以使用该模式。 for _ in 1...3{ } 标识符模式 (identifier pattern)

C# 8 的模式匹配

梦想与她 提交于 2019-12-01 08:42:25
C# 7 里面的 Pattern Mathing is 模式 switch 和 when C# 8 里面的 Pattern Matching 使用 Deconstructor 和 位置匹配模式 下面两个类 Teacher 和 Student 都由构造函数( Constructor )和 Deconstructor : 下面我想写一个方法判断学生是不是 5 年级并且是学数学的: 这里我们就用到了 Student 的 Deconstructor 和位置匹配模式,这里面的下划线叫做“ discard”(丢弃) ,表示我们不会使用它不关心它。 如果代码这样写,那么传进来的任何学生都满足这个匹配。 如果想判断 5 年纪的学生,我们可以这样写: 还想判断他的老师是否教数学,可以这样写: 注意,这里面调用的都是 Deconstructor 。 实际上,我们可以把 Deconstructor 的类型去掉,像这样: 实际上针对这种需求,使用if语句可能更好,更容易维护。但是如果循环嵌套的情况下无法使用 if ,那么这种位置模式匹配就有用了。 属性匹配模式 位置匹配模式很强大,但是可阅读性太差,下面看看属性匹配模式 。 还是之前的需求: 我想这个一看就明白,不需要解释了吧? 而且这个方法可以写的更通用一些: 参数类型改为 object ,然后先判断它是不是 Student ,在判断是否是 5

vim常用命令总结 (转)

馋奶兔 提交于 2019-12-01 05:38:01
在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。 vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v 从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束。 V 从光标当前行开始,光标经过的行都会被选中,再按一下V结束。 Ctrl + v 从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按一下Ctrl + v结束。 ggVG 选中全部的文本, 其中gg为跳到行首,V选中整行,G末尾 选中后就可以用编辑命令对其进行编辑,如 d 删除 y 复制 (默认是复制到"寄存器) p 粘贴 (默认从"寄存器取出内容粘贴) "+y 复制到系统剪贴板(也就是vim的+寄存器) "+p 从系统剪贴板粘贴 ============================================================= vim命令总结 1.删除字符 要删除一个字符,只需要将光标移到该字符上按下 "x"。 2.删除一行 删除一整行内容使用 "dd"命令。删除后下面的行会移上来填补空缺。 3.删除换行符 在 Vim中你可以把两行合并为一行

php 正则表达式中的 .*? 表示什么意思?

我只是一个虾纸丫 提交于 2019-12-01 04:49:57
php 正则表达式中的 .*? 表示什么意思? 是非贪婪模式 .*会匹配后面的一切字符,就是到结束的意思 加?后就是不贪婪模式,这时要看?后边的字符是什么了,如.*?"的意思是遇到双引号则匹配结束 .*?>的意思是遇到>则匹配结束 例如: 5.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉): ].*?>.*?/si", "替换内容", $script); ?> 来源: https://www.cnblogs.com/xiaogou/p/11655538.html

Python之re模块

瘦欲@ 提交于 2019-12-01 02:59:02
一、正则表达式     re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。注意: re模块是python独有的 正则表达式所有编程语言都可以使用 re模块、正则表达式是对字符串进行操作 因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。 (一)常用正则 1、字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 正则 待匹配字符 匹配结果 说明 [0123456789] 8 True 在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配 [0123456789] a False 由于字符组中没有"a"字符,所以不能匹配 [0-9] 7 True 也可以用-表示范围,[0-9]就和[0123456789]是一个意思 [a-z] s True 同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示 [A-Z] B True [A-Z]就表示所有的大写字母 [0-9a-fA-F] e True 可以匹配数字,大小写形式的a~f,用来验证十六进制字符 2、字符 元字符 匹配内容 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n

消息中间件---RabbitMQ入门2---消息传递模式

我是研究僧i 提交于 2019-11-30 22:42:20
第二篇我们简单介绍下RabbitMQ的一些消息传递模式: 1、直接模式(Direct) (1)直接模式简介 我们需要将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式。 任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。 1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。 2.这种模式下不需要将Exchange进行任何绑定(binding)操作。 3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。 4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。 (2)创建队列 做下面的例子前,我们先建立一个叫itcast的队列。 Durability: 是否做持久化 Durable(持久) transient(临时) Auto delete : 是否自动删除 (3)代码实现---消息生产者 一、创建工程rabbitmq_demo,引入amqp起步依赖 ,pom.xml如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐parent</artifactId>

springboot2.x整合rabbitmq

我们两清 提交于 2019-11-30 21:45:51
首先请确保你的rabbitmq服务已经打开,或者百度搜索安装 Exchange 类型 Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct、fanout、topic、headers 。只说前三种模式。 1.Direct模式 消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中。路由键与队列名完全匹配 2.Topic模式 topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*匹配一个单词。 3.Fanout模式 每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。 项目结构 pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"