Perl语言正则表达式使用案列一

2022-07-08  本文已影响0人  吕强强学生信

最近一段时间没有进行公众号文章更新,到不是因为没有新的内容可以写,其实做了一些注释的分析,因为被注释软件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

本文使用 文章同步助手 同步

上一篇 下一篇

猜你喜欢

热点阅读