模式匹配

Python 正则表达式

筅森魡賤 提交于 2020-01-13 00:21:47
Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。 re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。 本章节主要介绍Python中常用的正则表达式处理函数。 re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 函数语法 : re.match(pattern, string, flags=0) 函数参数说明: 参数 描述 pattern 匹配的正则表达式 string 要匹配的字符串。 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 匹配成功re.match方法返回一个匹配的对象,否则返回None。 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。 匹配对象方法 描述 group(num=0)

Java正则表达式

此生再无相见时 提交于 2020-01-12 09:15:26
一、介绍 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 二、正则表达式的规则 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。 []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。 -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。 在中括号里面和外面含义不同,如在外时,就表示开头,如 7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。 .表示匹配任意的字符。 \d表示数字。 \D表示非数字。 \s表示由空字符组成,[ \t\n\r\x\f]。 \S表示由非空字符组成,[^\s]。 \w表示字母、数字、下划线,[a-zA-Z0-9_]。 \W表示不是由字母、数字、下划线组成。 ?: 表示出现0次或1次。 +表示出现1次或多次。 *表示出现0次、1次或多次。 {n}表示出现n次。 {n,m}表示出现n~m次。 {n,

Trie树与AC自动机

自作多情 提交于 2020-01-10 02:56:40
Trie树与AC自动机 作为现阶段的学习中个人应有的常识,AC自动机形象的来讲就是在Trie树上跑的一个KMP。由此,我们就先来谈一谈Trie树。(有图) 1. Trie树 又称单词查找树,字典树,一般用于字符串的匹配。它利用公共的字符串前缀进行查询,减少了无谓的操作,是空间换时间的经典算法。举例: 此图包含了{"to", "tea", "ted", "ten", "a", "i", "in", "inn"}这些字符串。 Trie树的基本性质可以归纳为: 根节点不包含字符,除根节点意外每个节点只包含一个字符。 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符串不相同。 Trie树有两个基本操作,一为插入,二为删除,且两者复杂度均为 \(O(len)\) (其中$len = $ 字符串长度)。 我们以对五个串 aaaa , abb , aabbb , baa , bab 的操作进行说明。 1.基本操作 1.插入 插入 aaaa 首先插入串 aaaa 。对树中没有的节点进行新建,连接。结果: 对,就是这样的简单插入。(图中红色字母代表一个单词的结尾) 插入 abb 再插入串 abb 。在插入时,已有的节点直接走过去,没有的就插入再走过去。结果: 1.插入 a 2.插入 b 3.再插入 b 完成。 3.插入 aabbb 不再赘述

Python爬虫实践 ——— Regular Expressions Python re模块

£可爱£侵袭症+ 提交于 2020-01-08 21:31:58
Python re 模块,提供了 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。 (1)re.match 函数   match函数   从字符串起始位置匹配一个模式。   语法: re . match ( pattern , string , flags = 0 )     parttern 匹配模式 string 要匹配的字符串 flag 限定修正符re.i re.g re.m (2)re.search 函数   search函数   扫描整个字符串并返回第一个成功的匹配。   语法:re.search( pattern , string , flags = 0 )     parttern 匹配模式 string 要匹配的字符串 flag 限定修正符re.i re.g re.m                     ****** re.match与re.search的区别 ****** re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。 (3)re.sub函数   sub函数   Python 的re模块提供了re.sub用于替换字符串中的匹配项。   语法: re . sub ( pattern , repl , string ,

2019前端最全面试题

China☆狼群 提交于 2020-01-08 03:57:44
项目地址 HTML问题 HTML5语义化 什么是语义化?就是用合理、正确的标签来展示内容,比如h1~h6定义标题。 好处 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构。 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。 方便其他设备解析,如盲人阅读器根据语义渲染网页 有利于开发和维护,语义化更具可读性,代码更好维护,与CSS3关系更和谐。 http://www.daqianduan.com/6549.html 为什么最好把 CSS 的 <link> 标签放在 <head></head> 之间?为什么最好把 JS 的 <script> 标签恰好放在 </body> 之前,有例外情况吗? 把 <link> 放在 <head> 中 把 <link> 标签放在 <head></head> 之间是规范要求的内容。此外,这种做法可以让页面逐步呈现,提高了用户体验。将样式表放在文档底部附近,会使许多浏览器(包括 Internet Explorer)不能逐步呈现页面。一些浏览器会阻止渲染,以避免在页面样式发生变化时,重新绘制页面中的元素。这种做法可以防止呈现给用户空白的页面或没有样式的内容。 把 <script> 标签恰好放在 </body> 之前 脚本在下载和执行期间会阻止 HTML 解析。把 <script> 标签放在底部,保证 HTML 首先完成解析,将页面尽早呈现给用户

正则表达式匹配

人走茶凉 提交于 2020-01-08 03:52:18
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 public class Solution { public boolean match(char[] str, char[] pattern) { return String.valueOf(str).matches(String.valueOf(pattern)); } } 来源: https://www.cnblogs.com/wxisme/p/5832945.html

正则表达式

跟風遠走 提交于 2020-01-07 20:06:12
定义:正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 实现方式:正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 总结:用多个特殊符号(看起来像火星文)搜索字符串并作相应操作; 正则表达式的手册直接找MSDN就好了,贴上链接方便直接跳转 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expressions 里面的内容很全,也有一些例子,但是对于初学者墙裂安利 https://regexper.com/ 这个网站,在该网站你可以将“火星文”以图形化的方式表现出来,使之非常容易理解; 来源: https://www.cnblogs.com/Alwaysblue/p/12163292.html

sed 流编辑器

≡放荡痞女 提交于 2020-01-06 17:51:06
sed 逐行读取内容到模式空间内,进行匹配编辑操作,若不匹配直接输出到屏幕 常用选项: -n 不输出模式空间的内容到屏幕 -e 可以指定多个编辑命令 -f /PATH/TO/SED_SCRIPT_FILE 每行一个编辑命令 -r 支持扩展正则表达式 -i 直接编辑源文件 地址定界: 1) 不提供地址: 对全文进行处理(空地址) 2) 单地址: # 指定行 /pattern/ :被此模式匹配到的每一行 3) 地址范围: num1,num2 起始行到结束行 num1,+num2 起始行+#行 num,/pattern/ #开始到/pattern/结束 /pattern/,/pattern/ 4) 步进 ~ 1~2 表示从第一行开始,每次前进2行 所有奇数行 [root@node1 network-scripts]# cat -n ifcfg-ens33 1 TYPE=Ethernet 2 BOOTPROTO=static 3 DEFROUTE=yes 4 NAME=ens33 5 DEVICE=ens33 6 ONBOOT=yes 7 IPADDR=172.20.1.11 8 NETMASK=255.255.255.0 9 GATEWAY=172.20.1.254 [root@node1 network-scripts]# sed -n '1~2p' ifcfg-ens33 TYPE

词法分析器生成工具flex

不打扰是莪最后的温柔 提交于 2020-01-05 01:24:58
1.FLEX简介 单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。 +------------+ +------------+ +----------------+ | 输入文件*.l |------>|flex工具 |------>|输出文件lex.yy.c | +------------+ +------------+ +----------------+ FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的 扫描自动生成相应的词法分析函数 int yylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。该文件即为LEX的输出文件或输出的词法分析器。 也可将 int yylex()加入自已的工程文件中使用。 2. LEX源文件的格式 LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。而LEX本身的查错能力很弱,所以书写时一定要注意。 LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下: 定义部份 % % 规则部份  % % 用户附加C语言部份

socket阻塞与非阻塞,同步与异步

时间秒杀一切 提交于 2020-01-04 05:00:55
简单点说 : 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的 send 和 recv 两个函数来说吧 ... 比如你调用 send 函数发送一定的 Byte, 在系统内部 send 做的工作其实只是把数据传输 (Copy) 到 TCP/IP 协议栈的输出缓冲区 , 它执行成功并不代表数据已经成功的发送出去了 , 如果 TCP/IP 协议栈没有足够的可用缓冲区来保存你 Copy 过来的数据的话 ... 这时候就体现出阻塞和非阻塞的不同之处了 : 对于阻塞模式的 socket send 函数将不返回直到系统缓冲区有足够的空间把你要发送的数据 Copy 过去以后才返回 , 而对于非阻塞的 socket 来说 send 会立即返回 WSAEWOULDDBLOCK 告诉调用者说 :" 发送操作被阻塞了 !!! 你想办法处理吧 ..." 对于 recv 函数 , 同样道理 , 该函数的内部工作机制其实是在等待 TCP/IP 协议栈的接收缓冲区通知它说 : 嗨 , 你的数据来了 . 对于阻塞模式的 socket 来说如果 TCP/IP 协议栈的接收缓冲区没有通知一个结果给它它就一直不返回 : 耗费着系统资源 .... 对于非阻塞模式的 socket 该函数会马上返回 , 然后告诉你 :WSAEWOULDDBLOCK---" 现在没有数据 ,