내 질문은 다음과 같습니다.file(1) 및 Magic(5): 다른 형식 설명.
FASTA 시퀀스를 설명하고 싶습니다(http://en.wikipedia.org/wiki/FASTA_format)
그것은DNA 서열(ATGC에만 해당)
>header
ATGCTAGCATAGCATCGATGCTGTAGCTACGTAGCTACGTCTACG
"마법의" 패턴은
>.*\n[ATGC]*
또는단백질시퀀스(ACDEFGHIKLMNPQRSTVWYBZX에는 ATGC도 포함되어 있음)
>header
AHITKLMNPQRGHIKLMNPQRC
"마법의" 패턴은
>.*\n[ACDEFGHIKLMNPQRSTVWYBZX]*
하지만 이 정규식을 사용할 때마다 파일은 두 번째 정규식과 일치하기 때문에 그것이 단백질이라고 알려줍니다. 결과의 우선순위를 정하는 방법이 있나요? "이 패턴이 일치하면 다른 패턴을 시도하지 마세요"와 같은 우선 순위를 정하는 방법이 있습니까?
답변1
강도 값을 사용하여 우선순위를 설정할 수 있습니다. ~에서매직(5):
선택적 강도는 다음 형식을 사용하여 현재 마법 설명을 참조하는 별도의 줄에 제공될 수 있습니다.
!:strength OP VALUE
피연산자 OP는 +, -, * 또는 /일 수 있으며 VALUE는 0에서 255 사이의 상수입니다. 지정된 피연산자를 사용하여 현재 계산된 기본 마력에 이 상수를 적용합니다.
단백질 설명의 우선순위를 낮추려면 다음 줄을 추가하세요.
!:strength - N
... N
DNA가 설명하는 부분 아래에 놓을 수 있을 만큼 충분히 큰 곳입니다.
테스트의 "현재 계산된 기본 마법 강도"는 즉시 명확하지 않지만 해당 --list
플래그를 사용하여 모든 것을 표시할 수 있습니다. 또는 소스 코드를 읽으십시오. 담당 기능은 다음과 같습니다.apprentice_magic_strength
. 이는 항목의 첫 번째 테스트를 기반으로 계산되므로 한 유형이 다른 유형보다 우선하도록 하려면 동일한 첫 번째 행을 갖는 것이 도움이 됩니다. (이렇게 하면 N
1만 있으면 됩니다.)
또 다른 문제: 정규식이 충분히 엄격하지 않습니다. *
0개의 문자가 일치할 수 있으므로 단백질, DNA 등 각 줄의 시작 부분에서 패턴을 찾을 수 있습니다. 조이려면 전체 라인에 다음이 포함되어 있는지 확인하십시오.오직허용되는 문자 수: \n[ATGC]+$
, 또는 \n[ATGC]{num,}$
(여기서 num은 예상되는 가장 짧은 패턴입니다.)
0 string =>header
>&0 regex \n[ATGC]+$ DNA
0 string =>header
>&0 regex \n[ACDEFGHIKLMNPQRSTVWYBZX]+$ PROTEIN
!:strength - 1