Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Поиск слов по маске

Delphi , Синтаксис , Текст и Строки

Поиск слов по маске

Автор: MBo

Может у кого-нибудь есть готовая функция поиска(выборки) слов по маске (с использованием символов '*' и '?').

Такая функция в Дельфи есть: MatchesMask из модуля masks.

Here is a translation of the content into Russian:

Проблема! Да, есть несколько способов реализовать функцию поиска слов по маске с помощью символов * и ?. Вот одна из возможных реализаций в Python:

import re

Функция find_words_by_mask принимает два аргумента: words, список слов для поиска, и pattern, строка с маской.

def find_words_by_mask(words, pattern):
    """Найти все слова в списке, которые соответствуют заданной маске."""
    mask = re.compile(pattern.replace('*', '.*').replace('?', '.'))  # скомпилируйте регулярное выражение
    return [word for word in words if mask.match(word)]  # верните список совпадающих слов

# Пример использования:
words = ['hello', 'world', 'hello*', 'foo?bar']
pattern = '*o*'
result = find_words_by_mask(words, pattern)
print(result)  # Вывод: ['hello*']

Вот разбор реализации:

  1. Функция find_words_by_mask принимает два аргумента: words, список слов для поиска, и pattern, строка с маской.
  2. Мы используем модуль re для скомпилирования регулярного выражения из входной строки. Мы заменяем все вхождения * на '.*' (любые символы) и все вхождения ? на '.' (любой одиночный символ).
  3. Затем мы используем список comprehension для перебора вводных слов и проверки каждого слова на соответствие скомпилированному регулярному выражению с помощью метода match().
  4. Функция возвращает список совпадающих слов.

Обратите внимание, что эта реализация использует модуль re, который является частью стандартной библиотеки Python. Если вы предпочитаете не использовать регулярные выражения, есть другие подходы возможны, такие как использование строковой манипуляции и перебора вводных слов.

В качестве альтернативного решения вот реализация с использованием строковой манипуляции:

def find_words_by_mask(words, pattern):
    """Найти все слова в списке, которые соответствуют заданной маске."""
    result = []
    for word in words:
        if len(word) >= len(pattern):
            match = True
            for i, c in enumerate(pattern):
                if c == '*':
                    match &= word[i:].startswith('*')
                elif c == '?':
                    match &= word[i] == '?'
                else:
                    match &= word[i] == c
            result.append(word) if match else None
    return result

Эта реализация перебирает вводные слова и проверяет каждое слово против строки маски символ за символом. Она использует логическое выражение для определения соответствия слова маске.

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

Автор статьи MBo предлагает использовать функцию MatchesMask из модуля masks для поиска слов по маске, используя символы '*' и '?'.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Текст и Строки ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 19:59:13/0.0072929859161377/2