정규식을 사용하여 괄호로 묶인 약어의 전체 형태 찾기

정규식을 사용하여 괄호로 묶인 약어의 전체 형태 찾기

괄호를 사용하여 텍스트에 지정된 약어의 전체 형식을 찾으려고 합니다.

예는 다음과 같습니다.

암의 주요 후성유전적 변화 중 하나인 비정상적인 DNA 메틸화는 소위 CpG 섬 메틸화 표현형(CIMP)이라고 불리는 대장암(CRC)의 하위 집합에 축적되는 것으로 보고되었으며, 이는 미소위성 감소된 불안정성과 관련이 있는 것으로 알려져 있습니다. MSI)-높은 CRC

여기서는 다음과 같은 짧은 형식/전체 형식 항목의 목록을 구성할 수 있기를 원합니다.

CRC - 대장암

CIMP - CpG 섬 메틸화 표현형

MSI - 마이크로 위성으로 인한 불안정성 감소

문제는 를 사용하여 괄호 안에 있는 모든 엔터티를 찾을 수 있었지만 re.findall('(\(.*?\))', s)해당하는 전체 형식을 찾는 것이 어렵다는 것입니다.

이러한 전체 형식이 모두 괄호 왼쪽에 있다고 가정하면 다음을 사용하고 싶습니다.2괄호 안의 약어의 전체 형태를 캡처하기 위한 조건-

  • 단어 수는 3+|SF|를 넘지 않아야 합니다. 어디에서 |SF| 짧은 형식의 문자 수입니다(MSI(Micro Satellite Reduced Instability) - 여기에서 전체 형식에는 4단어가 있고 짧은 형식에는 3자가 있습니다)
  • 전체 형식의 첫 번째 단어는 짧은 형식의 첫 번째 문자로 시작됩니다(예:대장암(RC))

현재 에 대한 나의 이해로는 위의 2가지 조건을 해결하고 그러한 경우를 모두 텍스트에서 찾는 를 regex작성할 수 없습니다 .regex

이것에 대한 몇 가지 조언을 해주실 수 있나요?

답변1

Python을 사용한다고 가정합니다.

((\w)\w* )(\w* ){0,3}\((?i)(\2)[^)]*\)

이는 그룹 2에 있는 단어의 첫 번째 문자를 캡처합니다. 이 단어 뒤에는 0~3개의 단어가 옵니다(적절할 경우 숫자를 늘림). 모든 단어는 문자 그대로의 공백으로 구분됩니다. 다음은 대괄호 뒤에 그룹 2에 캡처된 문자가 옵니다. 이 문자는 대소문자를 구분하지 않습니다. 이 모든 것은 나머지 브래킷 패턴을 따릅니다.

단어 수와 약어의 문자 수를 일치시키지 못하여 귀하의 조건 중 하나가 충족되지 않습니다.

내 의견이 너무 비관적이었습니다. 그러나 그것은 말도 안되는 일을 많이 잡을 것입니다.

regex101.com에서 테스트됨

그건 그렇고, 브래킷 패턴을 조정하고 \([^)]*\). 욕심 많은 승수가 있는 부정 문자에는 역참조가 필요하지 않으므로 프로세스가 더 빠르게 진행됩니다.

관련 정보