исправить регулярное выражение
От: мыщъх США http://nezumi-lab.org
Дата: 13.09.11 07:52
Оценка:
есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.

программа парсит текст с помощью следующего регулярного выражения: 'Creation Date:\s?(.+)', которое на самом деле должно находить [Cc]reation [Dd]ate и\или [Cc]reation [Oo]n, но оператор | не жадный и двух выражений не ищет, а логика программы такова, что размазана тонким слоем и просто так заставить ее искать два регулярных выражения -- слишком много изменений будет в самых разных местах.

вымучал вот такой вариант:
'[Cc]reat[ei][do][n]{0,1} [DOdo][n]{0,1}(?:ate){0,1}\s*:\s*(.+)'

у него возможны ложные срабатывания и он совсем некрасивый. буду признателен за любые идеи по его допилу
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: исправить регулярное выражение
От: hardcase Пират http://nemerle.org
Дата: 13.09.11 07:58
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>буду признателен за любые идеи по его допилу


Сделать собственный движок, пускай сильно ограниченный, но умеющий то что нужно?
/* иЗвиНите зА неРовнЫй поЧерК */
Re: исправить регулярное выражение
От: hardcase Пират http://nemerle.org
Дата: 13.09.11 08:11
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.


М>программа парсит текст с помощью следующего регулярного выражения: 'Creation Date:\s?(.+)', которое на самом деле должно находить [Cc]reation [Dd]ate и\или [Cc]reation [Oo]n, но оператор | не жадный и двух выражений не ищет, а логика программы такова, что размазана тонким слоем и просто так заставить ее искать два регулярных выражения -- слишком много изменений будет в самых разных местах.


А при чем тут жадность?
creation (date|on):\s?(.+)

Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: исправить регулярное выражение
От: мыщъх США http://nezumi-lab.org
Дата: 13.09.11 08:11
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, мыщъх, Вы писали:


М>>буду признателен за любые идеи по его допилу


H>Сделать собственный движок, пускай сильно ограниченный, но умеющий то что нужно?

вообще-то это whois клиент. при вводе google.com и purl.org вылетает с исключением. у adobe.com не может распарсить дату создания, возвращая пустую. можно и самому с нуля написать. протокол совсем не сложный. но для начала решил попробовать заюзать готовое. а вы мне свой движок сразу
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[2]: исправить регулярное выражение
От: мыщъх США http://nezumi-lab.org
Дата: 13.09.11 08:22
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, мыщъх, Вы писали:


М>>есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.


М>>программа парсит текст с помощью следующего регулярного выражения: 'Creation Date:\s?(.+)', которое на самом деле должно находить [Cc]reation [Dd]ate и\или [Cc]reation [Oo]n, но оператор | не жадный и двух выражений не ищет, а логика программы такова, что размазана тонким слоем и просто так заставить ее искать два регулярных выражения -- слишком много изменений будет в самых разных местах.


H>А при чем тут жадность?

при том, что A|B в тексте вида AB возвратится только A. а мне надо, чтобы AB, при этом может быть либо A, либо B, либо A и B.

H>
H>creation (date|on):\s?(.+)
H>

создает две группы вместо одной. ну это ладно, тут можно (? использовать, но нужно искать creation date или created on. причем, с разными комбинациями заглавных/строченых.

H>Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру?

сложность в том, что в прграмме есть словарь ключ -> регулярка, передающийся как аругмент куда-то дальше, где регулярки вызываются в неясно какой последовательности и при каких обстоятельствах и из каких мест (код не мой). как отключить регистр в одной регулярке -- я не знаю. а во всех -- это не входит в мои планы, т.к. вызовет хз какие побочные эффекты.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: исправить регулярное выражение
От: hardcase Пират http://nemerle.org
Дата: 13.09.11 08:45
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, hardcase, Вы писали:


H>>Здравствуйте, мыщъх, Вы писали:


М>>>есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.


М>>>программа парсит текст с помощью следующего регулярного выражения: 'Creation Date:\s?(.+)', которое на самом деле должно находить [Cc]reation [Dd]ate и\или [Cc]reation [Oo]n, но оператор | не жадный и двух выражений не ищет, а логика программы такова, что размазана тонким слоем и просто так заставить ее искать два регулярных выражения -- слишком много изменений будет в самых разных местах.


H>>А при чем тут жадность?

М>при том, что A|B в тексте вида AB возвратится только A. а мне надо, чтобы AB, при этом может быть либо A, либо B, либо A и B.

(A|B)+

H>>Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру?

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

Дык это баг: помимо самой регулярки в словаре нужно хранить её настройки — чувствительность к регистру, многострочность и т.п.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: исправить регулярное выражение
От: Ka3a4oK  
Дата: 13.09.11 12:29
Оценка: +1
Почему в этот раздел? Если на немерле, то не проще ли потратить пять минут на написание Peg-парсера, чем пытаться составить заклинание на регекспах?
Re[3]: исправить регулярное выражение
От: para  
Дата: 13.09.11 13:18
Оценка:
Здравствуйте, мыщъх, Вы писали:

H>>А при чем тут жадность?

М>при том, что A|B в тексте вида AB возвратится только A. а мне надо, чтобы AB, при этом может быть либо A, либо B, либо A и B.
AB|A|B

?
Re[4]: исправить регулярное выражение
От: мыщъх США http://nezumi-lab.org
Дата: 13.09.11 13:27
Оценка:
Здравствуйте, para, Вы писали:

P>Здравствуйте, мыщъх, Вы писали:


H>>>А при чем тут жадность?

М>>при том, что A|B в тексте вида AB возвратится только A. а мне надо, чтобы AB, при этом может быть либо A, либо B, либо A и B.
P>
P>AB|A|B
P>

P>?
как на счет ARBY или BRA? не найдет ведь. мой вариант находит. но он слишком громоздкий...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[5]: исправить регулярное выражение
От: YF Германия  
Дата: 13.09.11 13:57
Оценка:
Здравствуйте, мыщъх, Вы писали:
М>как на счет ARBY или BRA? не найдет ведь. мой вариант находит. но он слишком громоздкий...
A.*B|B.*A|A|B
Re[2]: исправить регулярное выражение
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.11 14:20
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Почему в этот раздел? Если на немерле, то не проще ли потратить пять минут на написание Peg-парсера, чем пытаться составить заклинание на регекспах?


Полностью согласен.

Если вопрос именно по регексам дотнета, то могу перенести вопрос в "дотнет".

Если пишешь на Немерле, то для сложных случаев разбора строк PegGrammar использовать куда проще. Да и код будет быстрее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: исправить регулярное выражение
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.11 14:21
Оценка:
Здравствуйте, hardcase, Вы писали:

Блин, ну, еще тебе объяснять, что овеквотинг это плохо?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: исправить регулярное выражение
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.11 14:23
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Дык это баг: помимо самой регулярки в словаре нужно хранить её настройки — чувствительность к регистру, многострочность и т.п.


Если речь о дотенте, то хранить нужно объект Regex.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: исправить регулярное выражение
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.11 14:25
Оценка:
Здравствуйте, YF, Вы писали:

М>>как на счет ARBY или BRA? не найдет ведь. мой вариант находит. но он слишком громоздкий...

YF>A.*B|B.*A|A|B
YF>

Только не ".?", а "\w*". Как я понимаю он идентификаторы ищет. Ну, или даже "(\w|\d|_)*"
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: исправить регулярное выражение
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.11 14:26
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.


Ты часом форумом не ошибся?

Или у нас компания приятнее?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: исправить регулярное выражение
От: мыщъх США http://nezumi-lab.org
Дата: 13.09.11 16:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, мыщъх, Вы писали:


М>>есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.


VD>Ты часом форумом не ошибся?


VD>Или у нас компания приятнее?


компания приятнее. и люди тут опытные обитают. решил, что помогут.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: исправить регулярное выражение
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.09.11 19:05
Оценка:
Здравствуйте, мыщъх, Вы писали:

VD>>Или у нас компания приятнее?

М>
М>компания приятнее. и люди тут опытные обитают. решил, что помогут.

Ну, тогда ладно. Хотя я думал ты форумом ошибся.

А наст тут некоторые клеймят, что мы злые и агрессивные .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: исправить регулярное выражение
От: Ziaw Россия  
Дата: 14.09.11 19:04
Оценка:
Здравствуйте, мыщъх, Вы писали:

H>>Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру?

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

Про жадность я тоже ничего не понял. А опции можно и инлайн передать: @"(?i)creation (?:on|date)s*:\s*(.+)"
Re[4]: исправить регулярное выражение
От: Ziaw Россия  
Дата: 14.09.11 19:22
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, мыщъх, Вы писали:


H>>>Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру?

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

Z>Про жадность я тоже ничего не понял. А опции можно и инлайн передать: @"(?i)creation (?:on|date)s*:\s*(.+)"


Телепатия подсказала: @"(?i)creat(?:ed on|ion date)s*:\s*(.+)"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.