|
|
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть некая строка вида 'Опубликовано новое постановление Правительства Российской Федерации о штрафах'. Нужно извлечь из нее регексом все подстроки, состоящие только из слов с большими буквами без дублей. Сейчас использую регекс '(([A-ZА-Я]+[a-z0-9а-я]*[\s\.]){2,})', он извлекает то ,что нужно + шлак в виде последнего слова ( то есть дает 2 совпадения 'Правительства Российской Федерации' и 'Федерации ', оставить нужно только 'Правительства России '). Его нужно отсечь. Как это сделать? В моем понимании, для этого нужно оперировать группами ,но я не могу понять как. Заранее спасибо. Язык процедуры Pl/Perl, то есть regex с пред- и пост-условиями доступны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 18:22:25 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakama, Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 18:36:50 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
Ёш, Код: plsql 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. вывод Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 19:11:29 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakama, квантификатор {1, 2 } <Опубликовано>, <Правительства Российской> <Федерации> квантификатор {2,} <Правительства Российской Федерации> квантификатор {2,2} <Правительства Российской> 'шлака' замечено не было, как РВ было написано, так и работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 19:12:47 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
Сам по перлу не спец, поэтому функции написали другие люди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 19:13:11 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
volodin661, Это я в общем-то понимаю, мне нужно придумать регулярку, которая будет выделять только одну строчку, самую длиную с заглавнями буквами, без вхождений. Я смог придумать только такую. Если Вы можете предложить правильную, то буду премного благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 19:15:11 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakama, у Вас две пары скобок в регулярке и соответственно две группы, зачем Вы их обе берёте из _b? Берите только внешнюю (первую) группу, то есть _b [0] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 20:30:20 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakama, Код: perl 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вот так возвращает ---> Правительства Российской Федерации при строке -->Опубликовано новое постановление Правительства Российской Федерации о штрафах ( проверял из ком. строки, из pgsql не проверял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 20:41:54 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
volodin661, Фишка в том, что я в цикле текст обрабатываю разными регулярками. И брать какое-то конкретное совпадение для конкретной регулярки ну никак не укладывается в логику работы кода, полчается явный костыль. Тем более, если совпадений будет несколько - брать только четные, что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 21:06:51 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
volodin661, А можете написать точно саму регулярку из примера в кавычках водну строку? а то с разбиением не могу понять что к чему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 21:08:07 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakamavolodin661, А можете написать точно саму регулярку из примера в кавычках водну строку? а то с разбиением не могу понять что к чему. так эта то же РВ, которое было у тебя в старт-топике Код: perl 1. просто добавил модификатор х, чтобы получше смотрелась и убрал литеральную точку, потому что не понял идею по её внедрению. Что касается второго аргумента функции Aa_Bb_Cc(text), то это тоже было сознательное решение :-) ; я бы не передавал РВ аргументом, а оформлял бы свою функцию под каждый случай, так построже будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 13:14:26 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakamaбрать какое-то конкретное совпадение для конкретной регулярки ну никак не укладывается... тогда группируйте, но не запоминайте perldoc perlre Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 15:20:59 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, настолько не разбираюсь в регулярках, чтоб это понять. А можете показать, как поменять мою конструкцию с использованием этого кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 14:21:49 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
(( ?: [A-ZА-Я]+[a-z0-9а-я]*[\s\.]){2,}) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 15:35:58 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, Спасибо, работает. А где можно почитать на русском описание регексов поподробней? А то имеющиеся скудные. ПС. Некоторое развитие задачи, и, как я думаю, с похожим решением - из строки нужно выбирать названия предприятий с формой собственности. Пример - генеральный директор ФГУП "Атомфлот" Госкорпорации «Росатом», регекс ((ОАО|ЗАО|ООО|ФГУП|ФКП)\s[A-Za-z0-9а-яА-Я"«»]+) выдает {"ФГУП Атомфлот",ФГУП}. Как откинуть последний ФГУП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 18:34:28 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakama, В общем случае ваша задача о правительстве и предприятиях — не для регулярных выражений. Добро пожаловать в мир NLP, читайте про named entity recognition (распознавание именованных сущностей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 02:09:20 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
kamakama регекс ((ОАО|ЗАО|ООО|ФГУП|ФКП)\s[A-Za-z0-9а-яА-Я"«»]+) выдает {"ФГУП Атомфлот",ФГУП}. Как откинуть последний ФГУП? kamakama, уже писали, что не воспроизводится этот эффект, если посмотреть на вывод просто из Perl. Нет у нас ни лишней федерации, ни лишнего ФГУПа... нет. проверь сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 02:48:49 |
|
||
|
Извлечь самую большую группу регексом (regex)
|
|||
|---|---|---|---|
|
#18+
volodin661, Странно, что не воспроизводиться. А вот на смешанных языках (см. пост в начале) такой эффект есть. Может быть, чистый перл отсекает только первое вхождение, а при вызове из функции он возвращает все группы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 14:53:29 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38507873&tid=1998931]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
200ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 516ms |

| 0 / 0 |
