регулярное выражение Java на количество вложенных слов - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть строка текста, которую мне нужно найти, есть ли у нее вложенный цикл или нет Могу ли я использовать регулярное выражение для поиска количества вложенных циклов?

Итак, мой пример текста:

Library-Bookshelf-Book-Book-EndBookShelf-BookShelf-Book-EndBookShelf-Library

Я хочу найти: Whether the String belongs to the Library that has more than 1 Bookshelf in one at least has more than 1 books ?.Было бы возможно с регулярным выражением.Я ценю любые другие идеи.Благодарю.

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

Bookshelf-Book-Book-EndBookShelf
BookShelf-Book-EndBookShelf

Но мое регулярное выражение возвращает:

Bookshelf-Book-Book-EndBookShelf-BookShelf-Book-EndBookShelf
BookShelf-Book-EndBookShelf

Контрольный пример 2:

Library-Bookshelf-Book-author-author-location-Book-author-EndBookShelf-BookShelf-Book-author-EndBookShelf-Library

с регулярным выражением, мне нужно найти ли книжную полку вВ библиотеке более 2 книг, причем в одной книге более одного автора.Тестовый случай 2 должен вернуть одно совпадение, поскольку первая часть Bookshelf-Book-author-author-location-Book-author-EndBookShelf удовлетворяет условию.

Спасибо ..

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

как насчет этого

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String x = "Library-BookShelf-Book-author-author-location-Book-author-EndBookShelf-BookShelf-Book-author-EndBookShelf-Library";
    List<String> bookShelves = fun(x, "BookShelf", "EndBookShelf");
    for (String book : bookShelves)
    {
        List<String> authors = null;
        if(book.indexOf("Book") == book.lastIndexOf("Book"))
            authors = fun(book, "Book", "Book");
        else
            authors = fun(book, "Book", "EndBookShelf");
    }
}

public static List<String> fun(String input, String startTag, String endTag){

    String [] c = input.split("-");
    List<Integer> shelfIndices = getIndices(c, startTag, endTag);

    List<String> answer = new ArrayList<String>();
    int i=0;
    while (i<shelfIndices.size()-1)
    {
        int start = shelfIndices.get(i);
        int end = shelfIndices.get(i+1);
        StringBuilder res = new StringBuilder();
        res.append(startTag+"-");
        for (int j=start+1; j<end; j++)
        {
            res.append(c[j]+"-");
        }
        res.append(endTag);
        answer.add(res.toString());
        i+=2;
    }
    for(String r: answer)
        System.out.println(r);
    return answer;
}

public static List<Integer> getIndices(String [] c, String startTag, String endTag){

    List<Integer> indices = new ArrayList<Integer>();

    for (int i=0; i<c.length; i++)
    {
        if (c[i].equals(startTag) || c[i].equals(endTag))
        {
            indices.add(i);
        }
    }

    return indices;
}

это распечатывает

BookShelf-Book-author-author-location-Book-author-EndBookShelf
BookShelf-Book-author-EndBookShelf
Book-author-author-location-EndBookShelf
Book-author-EndBookShelf
0 голосов
/ 26 февраля 2019

Попробуйте Regex: Bookshelf-(?:Book-)*EndBookShelf

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...