![정규식을 사용하여 괄호로 묶인 약어의 전체 형태 찾기](https://rvso.com/image/1510156/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B4%84%ED%98%B8%EB%A1%9C%20%EB%AC%B6%EC%9D%B8%20%EC%95%BD%EC%96%B4%EC%9D%98%20%EC%A0%84%EC%B2%B4%20%ED%98%95%ED%83%9C%20%EC%B0%BE%EA%B8%B0.png)
괄호를 사용하여 텍스트에 지정된 약어의 전체 형식을 찾으려고 합니다.
예는 다음과 같습니다.
암의 주요 후성유전적 변화 중 하나인 비정상적인 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에서 테스트됨
그건 그렇고, 브래킷 패턴을 조정하고 \([^)]*\)
. 욕심 많은 승수가 있는 부정 문자에는 역참조가 필요하지 않으므로 프로세스가 더 빠르게 진행됩니다.