正则表达大师,
以下是我要用正则表达式解析的以下代码行:
@ERR030882.2595 HWI-BRUNOP16X_0001:3:1:6649:5175#0/1
我想获得以下内容:
@ERR030882.2595 HWI-BRUNOP16X_0001:3:1:6649:5175#0
我在rubular.com上写了以下正则表达式:
(@.* *.)(!?(\/.))
我的想法是使用否定来移除/ (!?(\/.))
。但是,这会产生整条生产线吗?
@ERR030882.2595 HWI-BRUNOP16X_0001:3:1:6649:5175#0/1
为什么(?!thisismystring)
没有删除/ 1?我用谷歌搜索了火,但他们似乎建议我已经尝试过类似的事情了吗?我非常感谢你的帮助。
答案 0 :(得分:1)
我认为你要编写的是/(\@.* .*)(?=\/\d)/
(你需要转义符号@
以防止Perl将其视为一个数组)但你需要一个正面前瞻,因为你想要匹配所有内容,直到下面的字符是一个斜杠后跟一个数字。
这是一个演示的程序。
use strict;
use warnings;
use 5.010;
my $s = '@ERR030882.2595 HWI-BRUNOP16X_0001:3:1:6649:5175#0/1';
$s =~ /(\@.* .*)(?=\/.)/;
print $1, "\n";
但是 你最好复制整个字符串并删除斜杠及其后的所有内容,比如
use strict;
use warnings;
my $s = '@ERR030882.2595 HWI-BRUNOP16X_0001:3:1:6649:5175#0/1';
(my $fixed = $s) =~ s{/\d+$}{};
print $fixed, "\n";
<强>输出强>
@ERR030882.2595 HWI-BRUNOP16X_0001:3:1:6649:5175#0