如何解决如何匹配特定字符串后的字符?
当前,我正在使用perl正则表达式,其中,首先要匹配字符串“ Lecture”之后的字符(数字或字母数字),否则,每行都将缺少字符串“ Lecture”的情况下匹配最后一个字符。但是对于我的用例来说,它似乎并不是很好。我在下面添加了我的整个命令
cat 1.txt | perl -ne 'print "$1 \n" while /(?:\w*Lecture)?([^\s]+)$/g;'
注意-字符串“ Lecture”周围可能没有空格,并且该行不一定以.mp4结尾。
猫1.txt
54282068 Lecture74- AS 29 Question.mp4
174424104Lecture 74B - AS 29 Theory.mp4
Branch Accounts Lecture 105
Lecture05 - Practicals AS 28
Submissions 20.mp4
HW Section 77N
预期产量
74
74B
105
05
20
77N
我最好要有一个可以直接在Cli / Console中运行的解决方案。 (就像我的原始代码一样-cat 1.txt | perl代码)。 我不想执行单独的.pl文件。
解决方法
您可以使用alternation |
匹配Lecture,然后匹配可选的水平空白字符,或者使用负前瞻断言Lecture不存在。
Lecture\h*\K\w+|^(?!.*Lecture).*\h\K[^.\s]+
-
Lecture\h*
匹配讲座和可选的水平空白字符 -
\K\w+
清除匹配缓冲区并匹配1个以上的字符字符 -
|
或 -
^(?!.*Lecture)
断言没有演讲 -
.*\h
匹配到最后一个水平空白 -
\K[^.\s]+
清除匹配缓冲区,并将除空白字符或点以外的任何字符匹配1次以上
在本示例中,使用\K
可以获得匹配项,而不是捕获组。
例如
cat 1.txt | perl -ne 'print "$& \n" while /Lecture\h*\K\w+|^(?!.*Lecture).*\h\K[^.\s]+/g;'
输出
74
74B
105
05
20
77N
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。