最近一段时间没有进行公众号文章更新,到不是因为没有新的内容可以写,其实做了一些注释的分析,因为被注释软件PASA给搞的有点焦虑,着实耽误了我一些时间,为了赶点进度,也懒得再去分享公众号文章。PASA在安装时太不友好,刚开始使用起来上手也不是很顺利,下周找个时间分享一下PASA的安装使用过程。今天在使用Augustus接着PASA的一个结果文件往下分析时,使用到了正则,虽然略懂一些Perl,但这几年太少亲自写脚本了,一下子看时没能理解了是怎样匹配处理想要的字符串并重新输出的,有必要再去仔细查查强大的正则功能了。
定义:正则表达式是一种字符串模式,可用来和字符串进行匹配。匹配可能成功,也可能失败。许多UNIX命令,包括grep, sed, awk, ed, vi, emacs都有正则表达式的功能。
有这么一个格式的文件,
通过perl命令行:
cat train.err | perl -pe 's/.*in sequence (\S+): .*/$1/' >badgenes.lst
提取其中的一列信息,得到badgenes.list文件:
今天主要对正则中不同类型组合进行学习。
下面对s/.*in sequence (\S+): .*/$1/ 进行解析:
替换:s///这种形式表明正则表达式将被文本替换;
‘.’:换行符以外的任意字符;
重复符号:multiplier,如星号(*)表示出现零次以上;加号(+)则表示出现一次以上;问号(?)则表示出现零次或一次;
.* 代表一个通配符,它意味着“匹配任意字符(换行符除外)零次或多次”,也就是说in sequence 前的任何字符匹配;
\S 匹配非空格字符(字符组合[/t/n]), \S+ 匹配非空格字符一次以上;
反向引用(),假定想保存一些匹配供后用,那么为达到该目的,Perl有一个运算符(圆括号()),该运算符可用于包围读者希望匹配的一系列给定的字符。
如果用圆括号括住一组字符,那么就可以在正则表达式结束之前使用反向引用。如果想在s” ” “的第二部分(带下划线)中使用反向引用,那么要使用语法$1,$2等。如果想在m” “或者s” ” “的第一部分(带下划线)使用反向引用,那么使用语法/1/2等。
例子:
$string = ‘ far out’;
$string =~ s “(far)(out)” $2 $1″; # This makes string ‘ out far’.
在该例中将单词far out转换为out far。
总结一下这个正则的含义:.*匹配in sequence前内容 + 匹配 in sequence + \S+匹配非空格字符一次以上也就是gi|687_106-210内容并用反向引号()进行保存 + :.*匹配:及其后面的所有字符,$1进行替换并输出到新文件中。
补充学习:
单正则使用:
单字符类型:单字符类型是最常见和最常用的类型。如a。单字符类型”.”能跟除换行符号(\n)的任何字符匹配。如
/a./
会和任何长度为二,且开头是a的字符串匹配,除了”a\n”外。
字符类:(character class),写法是左右两个中括号([]),内放字符。即字符串对应此类型的地方,若出现唯一一个符合括号中列出的字符,就算符合。
/[abcde]/
/[aeiouAEIOU]/
若在中括号中放[或者],则需要在前面加反斜杠。如果想表示一段范围,则可以用破折号(dash-)连接。想表示破折号,则前面也必须加反斜杠。
[0123456789]
[0-9]
[0-9\-]
[a-zA-Z]
也可以用“反例”表示字符类别,只要在原来的写法前加上“^”即可。此种类型的意思是任何不在此类别内的单一字符才算上匹配。
[^0-9]
[^aeiouAEIOU]
预定义的字符类别
下面是这些通配符以及它们代表的含义和它们对应的字符组合:
.\d — 匹配数字(字符组合[0-9])。
.\D — 匹配非数(字符组合[^0-9])。
.\w — 匹配单词字符(字符组合[a-zA-Z0-9_])(这里下划线算作一个单词字符)。
.\W — 匹配非单词字符(字符组合[^a-zA-Z0-9_])。
.\s — 匹配空格字符(字符组合[/t/n])(制表符、换行符、空格)。
.\S — 匹配非空格字符(字符组合[/t/n])。
.- 匹配任意字符(在某些情况下)换行符除外(字符组合[^/n])、当输入m”(.*)”S时匹配任意字符。
.$- 尽管它实际上并不是一个通配符(它不匹配任何具体字符).但它是广泛使用的特殊字符;如果将其放在正则表达式的尾部则它匹配“行尾”。零宽度断言。
.^- 尽管实际上不是一个通配符,但如果它位于正则表达式的开头则它是匹配“行首”的特殊字符。
./b,/B- 与$和^相同;不匹配字符,但匹配单词边界(/b)或匹配无单周边(/B)。
参考:
http://www.blogjava.net/ruoyoux/articles/253084.html
https://javaforall.cn/138204.html
本文使用 文章同步助手 同步
网友评论