Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для Robinser
12 / 12 / 0
Регистрация: 12.08.2011
Сообщений: 275

Регулярные выражения (поиск текста независимо от падежа)

23.08.2018, 17:23. Показов 5133. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помочь с кодом для такой задачи. В соседней теме был рассмотрен пример с регулярными выражениями, но нету решения для этой задачи. Если можно подробнее объяснить именно, как делать поиск в независимости от падежа.
"Создать случайный текст(строку), в котором будет содержаться номер этажа на котором вы живете в формате «этаж(е) 4»
Написать регулярное выражение, которое найдет в тексте эту подстроку даже если это будет любой этаж и само слово этаж может быть в разном падеже (этаж 4, этаже 4 и т.д.)"
В примере строка вводится, а надо просто сделать типа "Я живу в доме на этаже 4"
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.08.2018, 17:23
Ответы с готовыми решениями:

Регулярные выражения - поиск многострочного текста
Помогите пожалуйста, вовсе немогу понять как искать с помощью регулярных выражений многострочный текст. Пример: <div...

Регулярные выражения: поиск текста внутри тегов
Доброго времени суток, подскажите как найти в Текст внутри тэгов?

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

32
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
24.08.2018, 08:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xoraxax Посмотреть сообщение
и да, найти требуется все вхождения в строке слова "этаж" в любом из падежей и следующим за ним числом.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.util.*;
 
public class ForCopy{
    static int answer;
    static String sAns;
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.print("Введите кол-во строк>>");
        int n = in.nextInt();
        in.nextLine();
        for(int i = 0; i<n; i++){
            String t = in.nextLine();
            boolean solve = prefix_function("этаж", t); //есть ли в строке t есть слово "этаж"
            if(solve){
                System.out.println(sAns+" "+answer);
            }
        }
    }
 
    public static boolean prefix_function(String s, String t){
        int lenS = s.length();
        s = s.toLowerCase();
        t = t.toLowerCase();
        String edit = s+"#"+t;
        int len = edit.length(), pi[] = new int[len];
        for(int i = 1; i<len; i++){
            int j = pi[i-1];
            while(j>0 && edit.charAt(i)!=edit.charAt(j)) j = pi[j-1];
            if(edit.charAt(i)==edit.charAt(j)) j++;
            pi[i] = j;
            if(pi[i]==lenS){
                while(i<len && !Character.isDigit(edit.charAt(i)))
                        i++;
                if(edit.startsWith(edit.substring(i-lenS-1, i-1)))
                sAns = edit.substring(i-lenS-1, i-1);
                else sAns = edit.substring(i-lenS-2, i-1);
                int k = i;
                while(k<len && Character.isDigit(edit.charAt(k)))
                    k++;
                answer = Integer.parseInt(edit.substring(i, k));
                return true;
            }
            /*
            сли длина префикс-функции i-го символа равна длине подстроки, которую мы ищем,
            то в тексте есть искомое слово.
             */
        }
        return false;
    }
}
Добавлено через 1 минуту
Цитата Сообщение от Welemir1 Посмотреть сообщение
быстродействие ничто перед четким следованием ТЗ
Учись быстро писать хороший код.
0
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
24.08.2018, 09:15
Цитата Сообщение от ManyGames Посмотреть сообщение
Учись быстро

Не по теме:

зачем ты показываешь всему миру, что у тебя проблемы фрустрации? Сейчас, ты просто не можешь понять о чем пишет Welemir1. Это не значит, что ты дурень малой. Мы искренне надеемся, что тебя минет участь больших П, т.к. ты быстро и хорошо пишешь код.

0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,697
Записей в блоге: 29
24.08.2018, 09:26
Цитата Сообщение от ManyGames Посмотреть сообщение
Учись быстро писать хороший код.
хорошо

Цитата Сообщение от ManyGames Посмотреть сообщение
хороший код.
я надеюсь ты не про свой код, где нет инкапсуляции, не закрыт сканер, зачем то считывается несколько строк, не бросаются исключения, метод назван в питон-стиле и получает на вход ни о чем не говорящие переменные s и t?
И который на фразу "Хожу я по этажу 5 а живу на этаже 4" выдает "этажу 5", а по ТЗ должен работать только на "этаж(е) 4"?
0
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
24.08.2018, 09:33
Welemir1,

Не по теме:

я тебя понимаю, но с пацаном не связывайся. У него, как видишь, большие проблемы в жизни...

0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
24.08.2018, 09:36
Лол. ТЗ - это требование заказчика, я это прекрасно понимаю. Если умеешь быстро и красиво писать код, знаешь много алгоритмов, оптимизации, то с этим всё будет ок, имхо, я это имел ввиду.
Знаешь, вроде малой тут я, но ты ведёшь себя намного глупее. Пытаешься меня оскорбить, это круто конечно. Но смысл? Если я знаю в плане алгоритмов немного больше тебя или кого-нибудь ещё, это не значит что "вы тут все тупые, а я умный, крутой, блаблабла" (ты ведь это имел ввиду, дядь). Да, я немного не стандартно решил задачу, окей. Да, написал про алгритм Кнута-Морриса-Пратта. Разве это лишняя для вас инфа? Может потом и самим пригодиться, а вы показываете, что если вы старше - значит умнее, значит "круче, опаснее", начинаете грубить. Главное - что я решил предложенную задачу, т.е. попытался помочь человеку. Че вы лезите-то куда не надо? Вот другое дело если бы предложили своё решение, а потом уже начинали спорить.

Добавлено через 2 минуты
Цитата Сообщение от Welemir1 Посмотреть сообщение
И который на фразу "Хожу я по этажу 5 а живу на этаже 4" выдает "этажу 5", а по ТЗ должен работать только на "этаж(е) 4"?
Я так понял задачу. Что если в тексте есть слово "этаж", то вывести его и число, идущее после него. Вообще, тонкости задания у ТС уточнять надо.
0
24.08.2018, 09:40

Не по теме:

Aviz__, ок

ManyGames, за сим разрешите откланяться, я тоже был молод и все вокруг были не правы!
А задачу ты не решил, проверь хоть вышеприведенный мной пример, хоть падежи (например творительный). Прощайте

1
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
24.08.2018, 09:41
Welemir1,

Не по теме:

Видишь, он в таких проблемах, что нам и не снилось! Давай будем милосердными и пожалеем парня? Может он и поймет, что не все черно белое, но не сейчас...

0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
24.08.2018, 09:47
Цитата Сообщение от Welemir1 Посмотреть сообщение
я надеюсь ты не про свой код, где нет инкапсуляции, не закрыт сканер, зачем то считывается несколько строк, не бросаются исключения, метод назван в питон-стиле и получает на вход ни о чем не говорящие переменные s и t?
Питон-стиль? Что-то новое. Каждый называет метод так, как ему удобнее, конечно следуя этикету языка (учёт регистра, например), имхо.
"Не закрыт сканнер" - бла бла бла. Простите, если Вам требуется его закрывать, то закрывайте.
Зачем обрабатывать исключения, если программа написана так, что их и не будет?..
s и t - ахах, ни о чем не говорящие, конечно. Для Вас расскажу: s - слово, которое ищется в тексте t. Алгоритм Кнута-Морриса-Пратта получает эти две строки, соединяет их в одну, прописывая между ними любой символ-разделитель, а далее для строки вычисляется префикс-функция.
Насчет инкапсуляции - в данной задаче так важно в каждую строку впихивать модификаторы доступа? Зачем?

Добавлено через 3 минуты
Цитата Сообщение от Aviz__ Посмотреть сообщение
Видишь, он в таких проблемах, что нам и не снилось! Давай будем милосердными и пожалеем парня? Может он и поймет, что не все черно белое, но не сейчас...
Наверное, последнее ваше сообщение, на которое я отреагирую. То раньше ты говорил что я "молодой, крутость для меня на первом месте", а теперь сам пытаешься максимально задеть, обидеть, это ж "круто" наверное для тебя. Окей, где я хвастался хоть раз? Сказав, что пол форума не знают определения "О большое"? Это не правда? Ну-ну..
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
24.08.2018, 09:53
ManyGames,
Регулярка
535034.326 �(99.9%) 16554.034 ops/s [Average]
(min, avg, max) = (470850.744, 535034.326, 559067.332), stdev = 22099.162
CI (99.9%): [518480.292, 551588.361] (assumes normal distribution)

Адовый алгоритм
355618.590 �(99.9%) 6009.295 ops/s [Average]
(min, avg, max) = (323702.746, 355618.590, 364937.410), stdev = 8022.237
CI (99.9%): [349609.295, 361627.885] (assumes normal distribution)
0
24.08.2018, 09:55

Не по теме:

Призыв к милосердию в твою сторону - тебя обижает?! Тогда, я действительно, к сожалению, прав((

0
10 / 11 / 2
Регистрация: 10.07.2018
Сообщений: 70
Записей в блоге: 1
24.08.2018, 10:18
Цитата Сообщение от xoraxax Посмотреть сообщение
ManyGames,
Регулярка
535034.326 �(99.9%) 16554.034 ops/s [Average]
(min, avg, max) = (470850.744, 535034.326, 559067.332), stdev = 22099.162
CI (99.9%): [518480.292, 551588.361] (assumes normal distribution)
Адовый алгоритм
355618.590 �(99.9%) 6009.295 ops/s [Average]
(min, avg, max) = (323702.746, 355618.590, 364937.410), stdev = 8022.237
CI (99.9%): [349609.295, 361627.885] (assumes normal distribution)
Это тест чего именно?

Добавлено через 15 минут
Цитата Сообщение от Welemir1 Посмотреть сообщение
А задачу ты не решил, проверь хоть вышеприведенный мной пример, хоть падежи (например творительный). Прощайте
Я писал, что не так понял задачу (или всё же надо у ТС спросить). Делал по названию темы (поиск текста независимо от падежа).
Может, такое вас устроит? И сканнер закрыт, и инкапсуляция есть. М?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.*;
 
public class ForCopy{
 
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.print("Введите кол-во строк>>");
        int n = in.nextInt();
        in.nextLine(); //хз как у вас, у меня без этого первая введённая строка равна ""
        for(int i = 0; i<n; i++){
            prefix_function(in.nextLine()); //есть ли в строке t есть слово "этаж"
        }
        in.close();
    }
 
    private static void prefix_function(String t){
        int lenS = "этаж".length();
        t = t.toLowerCase();
        String edit = "этаж"+"#"+t;
        int len = edit.length(), pi[] = new int[len];
        for(int i = 1; i<len; i++){
            int j = pi[i-1];
            while(j>0 && edit.charAt(i)!=edit.charAt(j)) j = pi[j-1];
            if(edit.charAt(i)==edit.charAt(j)) j++;
            pi[i] = j;
            if(pi[i]==lenS && i<len-1 && (edit.charAt(i+1)=='е' || edit.charAt(i+1)==' ') && !(Character.isLetter(edit.charAt(i+2)))){
                boolean nextE = edit.charAt(i+1)=='е';
                while(i+1<len && !Character.isDigit(edit.charAt(i)))
                    i++;
                int k = i;
                while(k<len && Character.isDigit(edit.charAt(k)))
                    k++;
                int ans = Integer.parseInt(edit.substring(i, k));
                System.out.println("этаж"+(nextE?"e ":" ")+ans);
            }
            /*
            сли длина префикс-функции i-го символа равна длине подстроки, которую мы ищем,
            то в тексте есть искомое слово.
             */
        }
    }
}
И по комменту понятно:
Java
1
        in.nextLine(); //хз как у вас, у меня без этого первая введённая строка равна ""
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
24.08.2018, 10:25
Цитата Сообщение от ManyGames Посмотреть сообщение
Это тест чего именно?
это jmh того кода, который ты выкладывал
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
24.08.2018, 11:10
Цитата Сообщение от Welemir1 Посмотреть сообщение
не закрыт сканер

Не по теме:

stdin закрывать не нужно, так-то

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.08.2018, 11:10

Регулярные выражения и замена текста
У меня очень тупой вопрос - как произвести замену текста по регулярному выражению И узнать что эта самая замена вообще произошла? Да, я...

Замена текста - регулярные выражения
Здравствуйте уважаемые форумчане! Столкнулся с задачей поиска и замены подстроки по маске. Понял, что надо рыть в регулярные выражения,...

Регулярные выражения разбор текста
Добрый день! При обратке текста взникла следующая ситуация - может быть кто стакивался? Мне нужно хотя бы вывести ссылки на страницу, а...

Регулярные выражения - поиск
Здравствуйте. У меня есть строка, полученная от FTP-сервера: 227 Entering Passive Mode (185,28,20,28,116,36). Как найти число в скобках,...

Регулярные выражения. Вырезать блок текста
Нужно вырезать блок текста, начиная с пометки и заканчивая пометкой. (смотрите скрин)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru