0

我有以下正则表达式:

egrep '(chr1 .*n70$|chr1 .*n70-)' results/files/forbidden_variants

这匹配

chr1 n70
chr1 n70-n79
chr1 n70-n79-n83
chr1 n70-n79
chr1 n70-n79-s15-s16
chr1 n70
chr1 n70-n91
chr1 n70

并且非常慢,因为我用不同的值替换了诸如 n70 之类的 id 数百万次。

因此,我想摆脱 OR。我已经写了:

egrep '(chr1 .*n70[-\$])' results/files/forbidden_variants

但它不起作用,因为我不匹配此命令的行尾。输出如下所示:

chr1 n70-n79
chr1 n70-n79-n83
chr1 n70-n79
chr1 n70-n79-s15-s16
chr1 n70-n91

我在这里做错了什么?:) 谢谢。

4

2 回答 2

1

只需在当前的 Regex 中添加一个 + :

egrep '(chr1 n70[-\$]+)' results/files/forbidden_variants
于 2013-07-22T11:53:45.657 回答
0

你为什么不简单地使用

chr1 n70

你可以使用 OR

chr1 n70($|-)

这基本上等同于您的第一个表达式,但是在您的第一个表达式中,我看不到 .* 在您的匹配项中的需要。

于 2013-07-22T12:06:45.300 回答