Комплексный поиск по массиву с помощью регулярных выражений в Python: изучение различных методов

Поиск определенных шаблонов или значений в массивах — обычная задача в программировании на Python. Когда дело доходит до поиска по более сложным шаблонам, регулярные выражения (регулярные выражения) могут оказаться мощным инструментом. В этой статье мы рассмотрим несколько методов выполнения поиска по массиву с использованием регулярных выражений в Python. Каждый метод будет сопровождаться примерами кода, демонстрирующими его использование.

Метод 1: перебор массива
Самый простой метод — перебрать каждый элемент массива и применить операцию сопоставления с шаблоном регулярного выражения. Вот пример:

import re
def search_array_iter(array, pattern):
    matches = []
    for item in array:
        if re.search(pattern, str(item)):
            matches.append(item)
    return matches
# Usage
my_array = [1, 2, 3, 'apple', 'banana', 'grape']
search_pattern = r'^a\w+'  # Matches elements starting with 'a'
result = search_array_iter(my_array, search_pattern)
print(result)  # Output: ['apple']

Метод 2: понимание списка
Построение списка обеспечивает краткий способ выполнения поиска в массиве с использованием регулярных выражений. Вот пример:

import re
def search_array_comprehension(array, pattern):
    return [item for item in array if re.search(pattern, str(item))]
# Usage
my_array = [1, 2, 3, 'apple', 'banana', 'grape']
search_pattern = r'^a\w+'  # Matches elements starting with 'a'
result = search_array_comprehension(my_array, search_pattern)
print(result)  # Output: ['apple']

Метод 3: np.vectorize из Numpy
Если ваш массив представляет собой массив NumPy, вы можете использовать функцию np.vectorizeдля поэлементного применения сопоставления регулярных выражений. Вот пример:

import numpy as np
import re
def search_array_numpy(array, pattern):
    vectorized_search = np.vectorize(lambda x: bool(re.search(pattern, str(x))))
    return array[vectorized_search(array)]
# Usage
my_array = np.array([1, 2, 3, 'apple', 'banana', 'grape'])
search_pattern = r'^a\w+'  # Matches elements starting with 'a'
result = search_array_numpy(my_array, search_pattern)
print(result)  # Output: ['apple']

Метод 4. Использование функции np.wherenp.where
NumPy позволяет нам найти индексы элементов массива, которые соответствуют шаблону регулярного выражения. Вот пример:

import numpy as np
import re
def search_array_npwhere(array, pattern):
    indices = np.where(np.char.match(array.astype(str), pattern))
    return array[indices]
# Usage
my_array = np.array([1, 2, 3, 'apple', 'banana', 'grape'])
search_pattern = r'^a\w+'  # Matches elements starting with 'a'
result = search_array_npwhere(my_array, search_pattern)
print(result)  # Output: ['apple']

Метод 5: Series.str.contains Pandas
Если вы работаете с объектами Pandas Series, вы можете использовать метод str.containsдля выполнения поиска на основе регулярных выражений. Вот пример:

import pandas as pd
def search_array_pandas(series, pattern):
    return series[series.astype(str).str.contains(pattern)]
# Usage
my_series = pd.Series([1, 2, 3, 'apple', 'banana', 'grape'])
search_pattern = r'^a\w+'  # Matches elements starting with 'a'
result = search_array_pandas(my_series, search_pattern)
print(result)  # Output: ['apple']

В этой статье мы рассмотрели несколько методов поиска по массиву с использованием регулярных выражений в Python. Мы рассмотрели перебор массива, использование понимания списка, использование функций NumPy и использование функций Pandas. Применяя эти методы, вы можете эффективно искать в массивах определенные шаблоны или значения на основе шаблонов регулярных выражений.