0

我有一个包含 2 行样本 DNA 序列的文本文件,使用pcregrep,我想找到匹配“CCC”的模式,尤其是跨越多行的模式 (参见 test.txt 中第 1 行的结尾到第 2 行的开头下面)

测试.txt:

AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCACCCGCCAGAGCAGAAAAUAUUGGGGCAGCGCC
CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUUCCCGACAUUGGCUGAAUA

使用命令:

pcregrep -M --color "C[\n]?C[\n]?C" test.txt

回报:

AGAGUGGCAAUAUGCGUAUAACGAUUAUUCUGGUCGCA**CCC**GCCAGAGCAGAAAAUAUUGGGGCAGCG**CC**

**C**CAUGCUGGGUCGCACAUGGAUCUGGUGAUAUUAUUGAUAAUAUUAAAGUUUU**CCC**GACAUUGGCUGAAUA

它似乎正确地突出显示了第 1 行中的 2 个 C,但是,它突出显示了第 2 行中的第一个 C,然后继续完全打印出第二行;给我一份C的副本。

我在这里做错了什么,如何避免在第 2 行中重复“C”?

4

1 回答 1

0

试试这个:

pcregrep -M --color "(?<!C)(C\RCC|CC\RC)(?!C)" test.txt

我假设您只想找到 3C秒,并且不超过3 秒C是可能的。如果这是不可能的,或者您不关心匹配超过 3C 的,您可以使用这个更简单的正则表达式来代替:

pcregrep -M --color "C\RCC|CC\RC" test.txt

解释:

(?<!C)   # Negative lookbehind: Don't match if there's a C before the match
(              # One of these:
      C\RCC    #   C + any kind of new line + CC
    | CC\RC    #  CC + any kind of new line + C
)
(?!C)    # Negative lookahead: Don't match it there's a C after the match

在此处查看演示。

于 2020-08-05T17:23:55.123 回答