0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 4

Регулярные выражения. Поиск книг по автору

25.10.2018, 21:36. Показов 1387. Ответов 5

Студворк — интернет-сервис помощи студентам
Необходима помощь. Регулярное выражение (указано ниже)
1) захватывает ненужные одиночные пробелы/табуляцию;
2) не захватывает необходимые выражения (примеры указаны ниже).
Проблема, полагаю, со вторым условием, содержащим номера групп.

Выражение:
JavaScript
1
([^«](Ахматова),?\s(Анна(\sАндреевна)?|(А\.\s?А\.))[^»])|([^«]\3\s\2[^»])
Примеры нужных выражений:
Кликните здесь для просмотра всего текста
Ахматова, Анна Андреевна
Ахматова Анна Андреевна
Ахматова Анна
Ахматова А.
Ахматова А.А.
Ахматова А. А.

Анна Ахматова
Анна Андреевна Ахматова
А. Ахматова
А.А. Ахматова
А. А. Ахматова

Примеры ненужных выражений:
Кликните здесь для просмотра всего текста
Анна Андреевна
А.Ахматова
АхматоваА.А.
Ахматова АА
"Ахматова Анна"
«Анна Ахматова»

Текст (для проверки):
Кликните здесь для просмотра всего текста
=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ...
..., Ахматова Анна Андреевна - ...
..., Ахматова Анна Андреевна, ...
...; Ахматова Анна Андреевна; ...
..., Ахматова Анна Андреевна: ...
..., Ахматова Анна «...»
..., Ахматова Анна: ...
..., Ахматова А. - ...
..., Ахматова А.А., ...
..., Ахматова А. А. «...»

..., Анна Андреевна Ахматова - ...
...; Анна Андреевна Ахматова; ...
..., Анна Андреевна Ахматова, ...
..., Анна Андреевна Ахматова: ...
..., Анна Ахматова «...»
..., Анна Ахматова: ...
..., А. Ахматова - ...
..., А.А. Ахматова - ...
..., А. А. Ахматова «...»

... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый

=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., А.Ахматова - ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
..., Ахматова А.А, ...
..., Ахматова АА. «...»

Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2018, 21:36
Ответы с готовыми решениями:

Поиск книг по автору
Всем доброго времени суток! Есть файл, в который записываются авторы, книги и год издания. Подскажите, пожалуйста, как сделать поиск книг...

Запрос на поиск книг по автору
Здравствуйте...Как организовать поиск книги по автору в SQL server. В аксес просто в конструкторе запроса вводишь в условии отбора ...

База книг. Организовать поиск по автору и году издания
3. База книг. О каждой книге хранится: номер книги, автор, название, год издания, количество страниц. Организовать поиск по автору и году...

5
Невнимательный
 Аватар для ft4l
3119 / 1303 / 359
Регистрация: 08.02.2013
Сообщений: 7,629
Записей в блоге: 2
25.10.2018, 23:46
imho с кавычками проще как-то вне выражения
типа как-то так
//без групп
PHP/HTML
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
51
52
53
54
<div id="x" style="white-space: pre;">
=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ...
..., Ахматова Анна Андреевна - ...
..., Ахматова Анна Андреевна, ...
...; Ахматова Анна Андреевна; ...
..., Ахматова Анна Андреевна: ...
..., Ахматова Анна «...»
..., Ахматова Анна: ...
..., Ахматова А. - ...
..., Ахматова А.А., ...
..., Ахматова А. А. «...»
 
..., Анна Андреевна Ахматова - ...
...; Анна Андреевна Ахматова; ...
..., Анна Андреевна Ахматова, ...
..., Анна Андреевна Ахматова: ...
..., Анна Ахматова «...»
..., Анна Ахматова: ...
..., А. Ахматова - ...
..., А.А. Ахматова - ...
..., А. А. Ахматова «...»
 
... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый
 
=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., А.Ахматова - ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
..., Ахматова А.А, ...
..., Ахматова АА. «...»
 
Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...
</div>
<hr/><hr/>
<div id="y" style="white-space: pre;"></div>
<a href="#" onclick="xtest(); return false;">test</a>
<script>
x=document.getElementById('x').innerHTML;
y=document.getElementById('y')
 
re = /(["«]?)(?:(?:А\.\s?){1,2}|Анна(?:\sАндреевна)?\s)Ахматова|Ахматова\s(?:(?:\s?А\.){1,2}|Анна(?:\sАндреевна)?)/g
function xtest(){
    while ( str = re.exec(x)){ if(!str[1]) y.innerHTML += str[0] +"\n";}
}
 
</script>
и, если всё заметил, не совпало только с этим "Ахматова, Анна Андреевна"
,? можно добавить

Добавлено через 10 минут
и А.Ахматова , оно точно не нужно?
1
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 4
26.10.2018, 16:58  [ТС]
  1. Группы.
    Данное выражение предполагал сделать, по возможности, менее громоздким:
    - использовать значения фамилии, имени и отчества, их инициалов единожды;
    - при необходимости заменить прочие упоминания отсылками на необходимые группы.
    Будет очень здорово, если получится сократить выражения в соответствии с указанными задумками.
  2. Инициалы.
    Неудачно взял в качестве примера поэтессу с одинаковыми инициалами имени и отчества.
    Данное выражение предполагалось сделать однотипным, подходящим для большинства писателей.
    Поэтому желательно не использовать квантификаторы для инициалов, как в предыдущем варианте.
    Для исключений, например: Толкин, Джон Рональд Руэл (Толкин Дж.Р.Р.) изменю выражение отдельно.
  3. Кавычки.
    В предложенном варианте символы кавычек могут как отсутствовать, так и присутствовать.
    Необходимо, чтобы их однозначно не было на границах искомого выражения.
    Потому как, зачастую, это означает название биографии и мемуаров, написанных другим автором.
    Возможно, стоит применить [^"«] в начале и [^"»] в конце выражения вместо (["«]?).
  4. Результаты поиска.
    Выражение " Ахматова, Анна Андреевна " (без кавычек) встречается достаточно часто.
    Как было верно замечено ft4l, для его захвата можно добавить ,? после фамилии.
    Выражение " А.Ахматова " (без кавычек) встречается относительно редко.
    И всё же, пусть считается нужным. Спасибо, ft4l, за уточнение.
  5. Пояснение ошибок.
    По возможности прошу пояснить ошибки в исходном и/или указанном ниже регулярном выражении.
    [^«"](((Ахматова),?\s(Анна(\sАндреевна)?|(А\. (\sА\.)?)))|(\4\s\3))[^"»]
Исправленные примеры нужных выражений:
Кликните здесь для просмотра всего текста
Ахматова, Анна Андреевна
Ахматова Анна Андреевна
Ахматова Анна
Ахматова А.
Ахматова А.А.
Ахматова А. А.

Анна Ахматова
Анна Андреевна Ахматова
А.Ахматова
А. Ахматова
А.А. Ахматова
А. А. Ахматова

Исправленные примеры ненужных выражений:
Кликните здесь для просмотра всего текста
Анна Андреевна
АхматоваА.А.
Ахматова АА
"Ахматова Анна"
«Анна Ахматова»

Исправленный и дополненный текст для проверки
Кликните здесь для просмотра всего текста
=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ...
..., Ахматова Анна Андреевна - ...
..., Ахматова Анна Андреевна, ...
...; Ахматова Анна Андреевна; ...
..., Ахматова Анна Андреевна: ...
..., Ахматова Анна «...»
..., Ахматова Анна: ...
..., Ахматова А. - ...
..., Ахматова А.А., ...
..., Ахматова А. А. «...»

..., Анна Андреевна Ахматова - ...
...; Анна Андреевна Ахматова; ...
..., Анна Андреевна Ахматова, ...
..., Анна Андреевна Ахматова: ...
..., Анна Ахматова «...»
..., Анна Ахматова: ...
..., А.Ахматова - ...
..., А. Ахматова - ...
..., А.А. Ахматова - ...
..., А. А. Ахматова «...»

... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый

=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
...,Ахматова А.А, ...
...,Ахматова АА. «...»
...,Ахматова А.А.. «...»

Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...
0
Невнимательный
 Аватар для ft4l
3119 / 1303 / 359
Регистрация: 08.02.2013
Сообщений: 7,629
Записей в блоге: 2
26.10.2018, 17:22
Группы в таком смысле предполагают что одинаковые куски совпадают хотя-бы дважды,
а тут получается три куска никак не одинаковых
использование такого (?(1)это:или это) тоже никак не упрощает выражение (непомню есть-ли в Js такое)

кавычки вроде получается контролировать только с последней, т.к. забраковав первую поиск начинается со следующего символа
, хотя и забраковав последнюю, просто позиция сдаёт назад
// Надо-бы освежить свои знания, на Js вообще мало кодил, и последние несколько лет не кодил совсем ни на чём .)

Добавлено через 7 минут
типа "ххх х.(х.)?(?!")" заберёт ххх х
0
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 4
28.10.2018, 17:59  [ТС]
Выражение, которое решает необходимую задачу, указано ниже.
JavaScript
1
(Ахматова,?\s(Анна(\sАндреевна)?|А\.(\s?А\.)?)|((Анна(\sАндреевна)?|А\.(\s?А\.)?)\s?Ахматова))(?=\s|:|;|,)(?!"|»|\s»)
  1. Группы.
    К сожалению, данное выражение получилось достаточно громоздким.
    Решить данную задачу с применением групп пока не удалось.
  2. Кавычки.
    Выражение «Анна Ахматова» исключается сугубо при наличии второго символа кавычек (»).
    К сожалению, назад смотрящих утверждений (lookbehind), которые проверяют есть ли что-то перед строкой, в JavaScript нет.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
28.10.2018, 21:14
PsyHo, вы очень много пишете, а главное не пишете - допустим мы нашли на строке Анну Ахматову, номер строки нужно вытащить и поместить в массив?
Весь текст с несколькими Ахматовыми это просто текст? Никаким массивом строк не является?

Добавлено через 1 час 45 минут
PsyHo, а с этой фразой что не так? ...,Ахматова А.А.. «...» Вроде по смыслу всё правильно.

Добавлено через 2 минуты
На тестирование:
PHP/HTML
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script type="module">
        let str = `Ахматова, Анна Андреевна
Ахматова Анна Андреевна
Ахматова Анна
Ахматова А.
Ахматова А.А.
Ахматова А. А.
Анна Ахматова
Анна Андреевна Ахматова
А.Ахматова
А. Ахматова
А.А. Ахматова
А. А. Ахматова`;
 
        let str2 = `Анна Андреевна
АхматоваА.А.
Ахматова АА
"Ахматова Анна"
«Анна Ахматова»`;
 
let str3 =`=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ... 
..., Ахматова Анна Андреевна - ... 
..., Ахматова Анна Андреевна, ... 
...; Ахматова Анна Андреевна; ... 
..., Ахматова Анна Андреевна: ... 
..., Ахматова Анна «...» 
..., Ахматова Анна: ... 
..., Ахматова А. - ... 
..., Ахматова А.А., ... 
..., Ахматова А. А. «...» 
 
..., Анна Андреевна Ахматова - ... 
...; Анна Андреевна Ахматова; ... 
..., Анна Андреевна Ахматова, ... 
..., Анна Андреевна Ахматова: ... 
..., Анна Ахматова «...» 
..., Анна Ахматова: ... 
..., А.Ахматова - ... 
..., А. Ахматова - ... 
..., А.А. Ахматова - ... 
..., А. А. Ахматова «...» 
 
... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый
 
=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
...,Ахматова А.А, ...
...,Ахматова АА. «...»
...,Ахматова А.А.. «...»
 
Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...`;
 
        function operation(str, f, i, o) {
            let shortI = i.charAt(0) + "\\.",
                shortO = o.charAt(0) + "\\.",
                array = str.split(/\r\n?|\n/),
                regs = [
                    new RegExp(String.raw`(?:^|[-яё"«])${f},?\s+${i}(\s+${o})?(?![а-яё"»])`, "ui"),
                    new RegExp(String.raw`(?:^|[-яё"«])${f},?\s+${shortI}(\s*${shortO})?(?![а-яё"»])`, "ui"),
                    new RegExp(String.raw`(?:^|[-яё"«])${i}\s+(${o}\s+)?${f}(?![а-яё"»])`, "ui"),
                    new RegExp(String.raw`(?:^|[-яё"«])${shortI}\s*(${shortO}\s*)?${f}(?![а-яё"»])`, "ui")
                ],
                nums = [];
 
            for (let item of array) {
                let m = regs.some(e => item.match(e));
 
                if (m)
                    console.log(item);
            }
            //console.log(array);
            return nums;
        }
 
        operation(str3, "Ахматова", "Анна", "Андреевна");
    </script>
</body>
</html>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2018, 21:14
Помогаю со студенческими работами здесь

Записи: организовать поиск книг по автору, жанру, году издания
Напишите программу, записывающую в файл прямого доступа инфор- мацию о книге (наименование, жанр, автор(ы),издательсвто, год изда- ния...

Cортировка каталога книг по автору
пыталась отсортировать книги по авторам и вывести все изданные после 2000 года,подскажите что не так? #include &lt;iostream&gt; ...

Привязка 2 книг к одному автору
Есть программа библиотека, и нужно привязать n-книг к одному автору. Чтобы при выборе автора выводило его книги а не только одну. Помогите...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru