독일어 작업 이름의 변형이 주어진 문자열에 몇 번 나타나는지 찾으려고합니다. 작업 이름이 Schneider
(Tailor)이라고 가정합니다. 변종은 작업 이름 자체를 포함하여 (작업 이름의 남성과 여성의 형태를 나타내는 것은)입니다Regexes : 정확한 일치 횟수를 계산하십시오.
Schneider Schneiderin Schneider/in Schneider/-in Schneider (m/w)
각 변형이 개별적으로 계산 무시해야합니다
Schneider
Schneiderin
Schneider/in
Schneider/-in
Schneider (m/w)
그래서 나는 다음과 같은 문자열이 있다고 가정 변형 사이의 겹침 따라서 각 변형을 살펴보고 위의 문자열에서 발생 횟수를 계산하면 결과는 항상 1이어야합니다.
단어 경계를 사용하여 정규식으로이를 해결하려고했습니다. 다음 패턴을 사용했습니다.
\b{}\b(?![\/]|(\s\(m\/w\)))
{}은 변형으로 대체됩니다.
정규식에서 단어 일치를 확인하기 위해 단어 경계를 사용합니다. 또한 forward lookahead를 사용하여 슬래시를 제외하고 (m/w)
을 단어 경계로 취급하지 않습니다.
문자열에서 찾을 수없는 마지막 패턴 (Schneider (m/w)
)을 제외하고 패턴이 잘 작동합니다. 현재 작업에서 볼 수 있습니다 : 완성도를 위해서 https://regex101.com/r/FTqvIO/4
여기 파이썬에 내 현재의 구현입니다 :
import re
def count_variant(variant, string):
pattern = re.compile(r'\b%s\b(?![\/]|(\s\(m\/w\)))' % variant)
matches = re.findall(pattern, string)
return len(matches)
모든 정규식에 대한 도움말 (또는 가능한 경우 더 쉬운 방법은) 대단히 감사를!
편집 : Regex101
에 올바른 링크를 삽입
야, 너 락! – tiefenauer