есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.
программа парсит текст с помощью следующего регулярного выражения: '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.
Здравствуйте, мыщъх, Вы писали:
М>есть программа. в программе есть ошибки. пытаюсь исправить. убив весь вечер.
М>программа парсит текст с помощью следующего регулярного выражения: 'Creation Date:\s?(.+)', которое на самом деле должно находить [Cc]reation [Dd]ate и\или [Cc]reation [Oo]n, но оператор | не жадный и двух выражений не ищет, а логика программы такова, что размазана тонким слоем и просто так заставить ее искать два регулярных выражения -- слишком много изменений будет в самых разных местах.
А при чем тут жадность?
creation (date|on):\s?(.+)
Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру?
Здравствуйте, 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.
Здравствуйте, 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.
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, 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], если можно отключить чувствительность к регистру? М>сложность в том, что в прграмме есть словарь ключ -> регулярка, передающийся как аругмент куда-то дальше, где регулярки вызываются в неясно какой последовательности и при каких обстоятельствах и из каких мест (код не мой). как отключить регистр в одной регулярке -- я не знаю. а во всех -- это не входит в мои планы, т.к. вызовет хз какие побочные эффекты.
Дык это баг: помимо самой регулярки в словаре нужно хранить её настройки — чувствительность к регистру, многострочность и т.п.
Здравствуйте, мыщъх, Вы писали:
H>>А при чем тут жадность? М>при том, что A|B в тексте вида AB возвратится только A. а мне надо, чтобы AB, при этом может быть либо A, либо B, либо A и B.
Здравствуйте, 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.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Почему в этот раздел? Если на немерле, то не проще ли потратить пять минут на написание Peg-парсера, чем пытаться составить заклинание на регекспах?
Полностью согласен.
Если вопрос именно по регексам дотнета, то могу перенести вопрос в "дотнет".
Если пишешь на Немерле, то для сложных случаев разбора строк PegGrammar использовать куда проще. Да и код будет быстрее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
H>Дык это баг: помимо самой регулярки в словаре нужно хранить её настройки — чувствительность к регистру, многострочность и т.п.
Если речь о дотенте, то хранить нужно объект Regex.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, 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.
Здравствуйте, мыщъх, Вы писали:
H>>Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру? М>сложность в том, что в прграмме есть словарь ключ -> регулярка, передающийся как аругмент куда-то дальше, где регулярки вызываются в неясно какой последовательности и при каких обстоятельствах и из каких мест (код не мой). как отключить регистр в одной регулярке -- я не знаю. а во всех -- это не входит в мои планы, т.к. вызовет хз какие побочные эффекты.
Про жадность я тоже ничего не понял. А опции можно и инлайн передать: @"(?i)creation (?:on|date)s*:\s*(.+)"
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, мыщъх, Вы писали:
H>>>Кстати, зачем эти [Cc], если можно отключить чувствительность к регистру? М>>сложность в том, что в прграмме есть словарь ключ -> регулярка, передающийся как аругмент куда-то дальше, где регулярки вызываются в неясно какой последовательности и при каких обстоятельствах и из каких мест (код не мой). как отключить регистр в одной регулярке -- я не знаю. а во всех -- это не входит в мои планы, т.к. вызовет хз какие побочные эффекты.
Z>Про жадность я тоже ничего не понял. А опции можно и инлайн передать: @"(?i)creation (?:on|date)s*:\s*(.+)"