模式匹配

LINUX文本处理三剑客

扶醉桌前 提交于 2020-01-26 23:01:04
LInux想必大家都不陌生,命令行秒杀微软的DOS,自从用上了linux鼠标似乎离我也原来越远了.今天我们不多说linux,说说linux的文本处理工具. 一.Grep: 全称: Global search Regular expression and Print out the line. 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行; 模式: 有正则表达式字符以及文本字符所编写的过滤条件; REGXP:有一类特殊字符以及文本字符所编写的模式;其中有些字符不表示字符字面意义,而表示控制或通配的功能; 分两类: 1.基本正则表达式:BRE 2.扩展正则表达式:ERE 1.正则表达式引擎: Grep [OPTION] PATERN [FILE…] 选项; --color=auto: 对匹配到的文本着色显示; -v:显示不能够被pattern匹配到的行; -i: 忽略字符大小写; -o:仅显示匹配到的字符串; -q: 静默模式,不输出任何信息; -A #,after,后#行 -B #, before,前#行 -C #: context, 前后各#行 -E:使用ERE: ps: grep -E = egrep 基本正则表达式元字符: 字符匹配: .:匹配任意单个字符; []: 匹配指定范围内的任意单个字符; [^]: 匹配指定范围外的任意单个字符;

[Python进阶]Python正则表达式

孤街浪徒 提交于 2020-01-26 22:26:21
[Python进阶]Python正则表达式 文章目录 [Python进阶]Python正则表达式 一、元字符 二、分组 三、特殊字符序列 四、正则表达式常用方法(函数) compile match fullmatch search sub subn split findall finditer escape start()、end()、span() 一、元字符 . 匹配除换行符之外的任何字符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符。 ^ 匹配字符串的开头 $ 匹配字符串的末尾或字符串末尾的换行符之前 re* 重复匹配前面的字符零次或者更多次(贪婪模式:尽可能多的匹配遇到的重复) re+ 重复匹配前面的字符1次或者更多次(贪婪模式) re? 重复匹配前面的字符0次或者1次(非贪婪模式) re{m} 重复匹配m次,例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。 re{n, } 精确匹配n个前面表达式。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。“o{0,}“则等价于"o*”。 re{m,n} 重复匹配m次或者n次(贪婪模式) re{m,n}? {m,n}的非贪婪模式. \\ 转义特殊字符或表示特殊序列 [...] 表示一组字符,如果以”^

KMP算法

社会主义新天地 提交于 2020-01-26 20:18:04
参考链接:https://www.acwing.com/solution/acwing/content/2286/ 主串 是”ababaeaba”, 模式串 是”ababacd”,在暴力算法中,遇到不匹配的情况是这样处理的: main: "ababaeaba" // 例如这两个串,当sub为"ababae"时和"ababac"进行对 pattern: "ababacd" // 比,当main[i]为e时,发现和pattern[j]的值e不一致,暴力的做法是去下一个sub,即用"babaeab"和pattern进行比较。 暴力算法的code(时间复杂度O(N*M)) #include<iostream> using namespace std; const int N = 10010,M = 100010; int n,m; char p[N],s[M]; int ne[N]; int main() { cin >> n >> p+1 >> m >> s+1; // BF匹配过程 for(int i=1;i<=m;i++) { for (int j = 0,k=i; j <= n; ++j) { if (s[k] != p[j+1]) { break; }else { k++; } if (j+1==n) { // 匹配成功 printf("%d ",i-1); break; } }

python——re模块(正则表达)

╄→尐↘猪︶ㄣ 提交于 2020-01-25 23:45:19
python——re模块(正则表达)   两个比较不错的正则帖子: http://blog.csdn.net/riba2534/article/details/54288552 http://blog.csdn.net/songyu0120/article/details/45028401 正则表达式 本身也和python没有什么关系,就是 匹配字符串内容的一种规则 。 官方定义: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 正则 在线测试工具 http://tool.chinaz.com/regex/ 字符组 : [字符组] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 字符分为很多类,比如数字、字母、标点等等。 假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。 正则 待匹配字符 匹配 结果 说明 [0123456789] 8 True 在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配 [0123456789] a False 由于字符组中没有"a"字符,所以不能匹配 [0-9] 7 True 也可以用-表示范围,[0-9]就和

re模块(Python中的正则表达式)

≯℡__Kan透↙ 提交于 2020-01-25 23:41:17
re模块    正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。 正则表达式中常用的字符含义 1、普通字符和11个元字符: 普通字符 匹配自身 abc abc . 匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符 a.c abc \ 转义字符,使后一个字符改变原来的意思 a\.c;a\\c a.c;a\c * 匹配前一个字符0或多次 abc* ab;abccc + 匹配前一个字符1次或无限次 abc+ abc;abccc ? 匹配一个字符0次或1次 abc? ab;abc ^ 匹配字符串开头。在多行模式中匹配每一行的开头 ^abc abc $ 匹配字符串末尾,在多行模式中匹配每一行的末尾 abc$ abc | 或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式 abc|def abc def {} {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次 ab{1,2}c abc abbc [] 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。

测试的思考

北城以北 提交于 2020-01-25 21:51:18
测试招聘者,特别是一、二线互联网公司的招聘者最苦恼的事儿就是 招人 。想找到一个合适的人难于上青天,每天各种撒网,简历看几百份,面大几十人,能捞到一个中意的小伙伴就谢天谢地了。 但同时很多测试小伙伴发现找工作很难,特别是进大一点的厂,他们特别挑:代码要会写,要有软件架构能力,问一大坨平时根本用不到的技术问题,还挑经验,挑沟通能力,挑这挑那,有时候还特么挑学历、挑年龄。。。供求总难以匹配起来,造成了双方都很痛苦。 Why? 能力要求不匹配是最核心的问题。软件、互联网近 20 年来飞速成长,其实也经历了很多阶段。行业软件兴盛阶段和外包兴盛阶段(2000-2010 年)行业进入了大量的测试人员,当时最主流的测试实践是:重心放在系统验收阶段。测试人员的主要工作基本都投入在了基于业务的黑盒测试上,对代码能力、系统理解的能力要求不多。 2010 年后,互联网行业的真正兴起让国内软件开发模式开始缓慢调头,快速迭代的模式逐步兴起,开发周期越来越短,迭代越来越快,但系统越来越越庞大、复杂。原来的测试工作模式和工作范围越来越无法满足要求了。但大量从业人员技能范围转变是一件很难的事情,行业是有巨大惯性的。 从宏观上看大量 QA 技能转变跟不上需求转变是造成市场供求不匹配的主要原因 So What? 三个观点: 1. 只做手工测试,不懂系统实现的测试工程师的职业发展会越来越受限。 2.

leetcode——Regular Expression Matching

天大地大妈咪最大 提交于 2020-01-24 00:20:34
## leetcode ——Regular Expression Matching 【题目描述】 Given an input string (s) and a pattern §, implement regular expression matching with support for ‘.’ and ‘*’. ‘.’ Matches any single character. ‘*’ Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). Note: s could be empty and contains only lowercase letters a-z. p could be empty and contains only lowercase letters a-z, and characters like . or *. Example 1: Input: s = “aa” p = “a” Output: false Explanation: “a” does not match the entire string “aa”. Example 2: Input: s = “aa” p = “a*”

浅谈正则表达式

元气小坏坏 提交于 2020-01-22 18:20:45
转自 0And1Story : 正则表达式详解 1. 什么是正则表达式? 正则表达式 (英语: Regular Expression ,在代码中常简写为 regex 、 regexp 或 RE ),又称 正规表示式 、 正规表示法 、 正规表达式 、 规则表达式 、 常规表示法 ,是 计算机科学 的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来 检索、替换 那些匹配某个模式的文本。 以上部分引用自维基百科条目: 正则表达式 通俗来说: 正则表达式就是用来在一个字符串中查找符合条件的子串,并且对字串进行如替换等操作的 2. 正则表达式语法: 基本语法 一个正则表达式通常被称为一个 模式 (pattern),为用来描述或者匹配一系列匹配某个 句法 规则的 字符串 。例如:Handel、Händel和Haendel这三个字符串,都可以由 H(a|ä|ae)ndel 这个模式来描述。大部分正则表达式的形式都有如下的结构: 选择 竖线 | 代表选择(即 或集 ),具有最低优先级。例如 gray|grey 可以匹配grey或gray。 数量限定 某个字符后的数量限定符用来限定前面这个字符允许出现的个数。最常见的数量限定符包括 + 、 ? 和 * (不加数量限定则代表出现一次且仅出现一次): 加号 +

字符串的模式匹配—数据结构算法

柔情痞子 提交于 2020-01-19 20:33:53
功能截图: 部分源码,不含main主函数,如需源码可在小程序下载: #include<stdio.h> #include<string.h> #define M 255 #define OK 1 #define ERROR 0 typedef char Str[M+1]; int StrAssign(Str s,char *ch){ int i; if(strlen(ch)>M){ return ERROR; } else{ s[0]=strlen(ch); for(i=1;i<=s[0];i++){ s[i]=*(ch+i-1); } return OK; } } // adccfghhsadff //str aaaasdfaa //index 123456789 //next 000041112 int Next(Str T,int next[]){ int i=1,j=0; next[i]=0; while(i<T[0]){ if(j==0||T[i]==T[j]){ i++;//2,3,4,5 j++;//1,2,3,4 if(T[j]!=T[i]){ next[i]=j; } else{ next[i]=next[j];// } } else { j=next[j];//j=0, } } } int Kmp(Str S,Str T,int next[]){ int i=1

《疯狂Python讲义》之文件IO

放肆的年华 提交于 2020-01-19 12:55:33
使用pathlib模块操作目录 pathlib模块提供了一组面向对象的类,这些类可代表各种操作系统上的路径,程序可通过这些类操作路径。 PurePath:代表并不访问实际文件系统的“纯路径” Path:代表访问实际文件系统的“真正路径” PurePath的基本功能 程序在创建PurePath和Path时,即可传入单个路径字符串,也可以传入多个路径字符串,PurePath会将它们拼接成一个字符串。 pp= PurePosixPath ( ’ crazyit ’,’some/path ’,’info ’ ) #看到输出 UNIX 风格的路径 print(pp) # crazyit/ some/path/info 如果在创建PurePath不传入任何参数,系统默认创建代表当前路径的PurePath #如果不传入参数,默认使用当前路径 pp = Pure Path () print(pp) #. 如果在创建PurrePath时传入的参数包含多个根路径,则只有最后一个根路径及后面的子路径生效 #如果传入的参数包含多个根路径 ,则只有最后一个根路径及后面的子路径生效 pp= PurePosixPath ('/etc''/usr','lib64') print(pp) # / usr/ lib64 pp = PureW ndowsPath ( 'c: /Windows','d:info' )