Документация Engee
Notebook

Поиск и замена текста

Обработка текстовых данных часто включает поиск и замену подстрок. Существует несколько функций, которые находят текст и возвращают различную информацию: некоторые функции подтверждают, что текст существует, другие подсчитывают количество повторений фрагмента текста, находят индексы или извлекают подстроки.


Поиск текста

Чтобы определить, присутствет ли фрагмент текста, можно применить функцию occursin(). Логические значения 1 соответствуют true, а 0 - false.

In [ ]:
txt = "she sells seashells by the seashore"
TF = occursin("sea", txt)
Out[0]:
true

Подсчитать, сколько раз встречается этот текст,можно используя функцию count().

In [ ]:
n = count("sea", txt)
Out[0]:
2

Чтобы определить, где находится текст, используйте функцию findall(), которая возвращает индексы символов, которые совпадают с фрагментом текста "sea".

In [ ]:
idx = findall("sea", txt)
Out[0]:
2-element Vector{UnitRange{Int64}}:
 11:13
 28:30

Поиск текста в массивах строк

Функции поиска и замены также позволяют находить текст в многоэлементных массивах. Например, найдите названия цветов в названиях нескольких песен.

In [ ]:
songs = ["Penny Lane", "Yellow Submarine","Blackbird"]
colors = ["Red", "Yellow", "Black"]

TF = occursin.(colors,songs)
Out[0]:
3-element BitVector:
 0
 1
 1

Чтобы отобразить список песен, содержащих названия цветов, используйте логический массив TF в качестве индексов в исходном массиве композиций. Этот метод называется логической индексацией.

In [ ]:
songs[TF]
Out[0]:
2-element Vector{String}:
 "Yellow Submarine"
 "Blackbird"

Совпадающие шаблоны

В дополнение к поиску буквального текста, такого как “sea” или “yellow”, можно выполнить поиск текста, соответствующего шаблону. Существует множество предопределенных шаблонов, таких как digits для поиска последовательности цифр.

In [ ]:
address = " Sesame Street, New York, NY 10128"
nums = match(r"\d+", address)
Out[0]:
RegexMatch("10128")

Для большей точности поиска вы можете комбинировать шаблоны. Например, найдите слова, начинающиеся с буквы “S”. Используйте строку, чтобы указать символ “S”, и lettersPattern, чтобы найти дополнительные буквы после этого символа.

In [ ]:
lettersPattern = r"[a-zA-Z]+"
pat = "N" * lettersPattern
StartWithS = match.(pat, address).match
Out[0]:
"New"

Другие функции для работы с текстом в Engee можно найти в разделе Текстовые строки.