(Этот ответ не имеет ничего общего с регулярными выражениями, но он охватывает некоторые случаи использования.)
Я не знаю, если это работает для вашего использования. Но похоже, что вы пытаетесь найти, есть ли в вашем тексте слово (или близкое опечатку). Если текст разделены пробелами, и ваше слово не содержит пробелы, вы можете попробовать что-то вроде:
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.
Вам нужно regex здесь? Это звучит как сложная (вычислительная) проблема для общих регулярных выражений. –
Возможно, мне это не нужно. Сначала я решил эту проблему для точных совпадений с использованием приведенного здесь кода, и теперь я пытаюсь разрешить принятие орфографических ошибок в ** input_string **. – Aaron