Поиск строк с помощью Regex - PullRequest
       24

Поиск строк с помощью Regex

0 голосов
/ 17 февраля 2012

Я пытаюсь использовать регулярное выражение (с которого я только начинаю), чтобы найти последовательности с 1 несовпадающим символом.Например, для шаблона «nan» и текста «banana» я бы хотел найти «ban» и «nan», причем первое является приемлемым с несоответствием с «b» и «n».Проблема, с которой я сталкиваюсь, состоит в том, чтобы создать шаблон регулярного выражения, не прибегая к созданию отдельных групповых вставок там, где я хочу.

    final String[] patterns = {"[a-z]an", "n[a-z]n", "na[a-z]"};
    final String text = "banana";

    for(String pattern : patterns)
    {
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while(m.find())
        {
            System.out.println(m.start() + " " + m.group());
        }
    }

Это то, что я имею в качестве теста, это своего рода неуклюжий способ получить то, что я хочу (хотя и с некоторыми дубликатами).Для такого рода поиска строк с одним несоответствием является регулярным выражением эффективным средством или я должен попробовать изменить традиционные алгоритмы, такие как Horspool или KMP?

1 Ответ

0 голосов
/ 17 февраля 2012

К сожалению, регулярные выражения разработаны для того, чтобы вы могли быть очень точными в шаблоне, который вы намереваетесь сопоставить, и наоборот, поддержка приблизительного соответствия практически отсутствует. Однако библиотека TRE была разработана специально для этой цели (http://laurikari.net/tre/)

...