(이 답변은 정규 표현식과 아무 상관이 없지만, 몇 가지 사용 사례를 다루고 있습니다.)
이 사용 사례에 대한 작동하는지 모르겠어요. 그러나 단어 (또는 긴 철자 오류)가 텍스트에 있는지 여부를 찾는 것처럼 보입니다. 대략, 이것이 무엇을
nopunct(s) = filter(c -> !ispunct(c), s)
nfcl(s) = normalize_string(s, decompose=true, compat=true, casefold=true,
stripmark=true, stripignore=true)
canonicalize(s) = nopunct(nfcl(s))
fuzzy(needle, haystack, n) = any(
w -> levenshtein(w, canonicalize(needle)) < n,
split(canonicalize(haystack)))
: 텍스트가 공백으로 구분되며, 귀하의 단어에 공백이 포함되지 않은 경우, 당신은 뭔가를 시도 할 수
nfcl
비슷한 "인간"모습으로 문자열을 정규화, 악센트를 제거하고, 대소 문자를 무시하고, 유니 코드 정규화를 수행합니다. 이 퍼지 매칭을위한 매우 유용합니다
julia> nfcl("Ce texte est en français.")
"ce texte est en francais."
nopunct
추가 문자열을 단순화, 문장 부호를 제거합니다.
julia> nopunct("Hello, World!")
"Hello World"
canonicalize
은 단순히이 두 변환을 결합합니다.
그런 다음 건초 더미의 단어 중 아무 것도 바늘의 n
내에 있는지 확인합니다.
예 :
julia> fuzzy("Robert", "My name is robrt.", 2)
true
julia> fuzzy("Robert", "My name is john.", 2)
false
이 결코 완벽한 솔루션을 의미하는 것입니다,하지만 그것은 일반적인 사용 사례를 많이 다루고 있습니다. 고급 사용 사례를 보려면 the subject을 자세히 살펴야합니다.
여기에 정규식이 필요합니까? 이것은 일반 정규 표현식에 대해 어려운 (계산적으로) 문제가있는 것처럼 들립니다. –
필요하지 않을 수도 있습니다. 먼저 여기에 나열된 코드를 사용하여 정확한 일치를 위해이 문제를 해결했으며 ** input_string ** 내에 맞춤법 오류를 허용하려고했습니다. – Aaron