Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Два вопроса по Regex Добавлено: 31.08.06 15:28  

Автор вопроса:  Sergey
Dim reg As Regex = New Regex("(?<pref1>(ABT|AFT|BEF|BET|CAL|EST|FROM|TO))")
Dim pr = reg.Match(s).Groups("pref1").Value


При отсутсиии совападений возвращается пустая строка.

1) Как, если возможно, вместо пустой строки возвращать Nothing?

2) Как задать значения (ABT|AFT|BEF|BET|CAL|EST|FROM|TO), считывая их из таблицы?

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #1 Добавлено: 01.09.06 12:32
1. Никак. Ну или преобразовать пустую строку в Nothing. З.Ы. а с пустой строкой не проще работать чем с Nothing?
2. Откуда считывать конкретно? Ибо фраза "считывая их из таблицы" очень уж расплывчата.

Ответить

Номер ответа: 2
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #2 Добавлено: 01.09.06 13:40
1. Жаль. С пустой строкой не работает DataRelation
2. Спасибо, разобрался.

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 02.09.06 19:12
Dim reg As Regex = New Regex("^(?<pref1>;(ABT|AFT|BEF|BET|CAL|EST|FROM|TO))$";)
Dim match As Match = reg.Match(s)
If match Is Nothing Then
   'облом
Else
   ;Dim text as String = match.Groups("pref1";).Value
End If


Это в случае если искомая строка - это одно из
ABT|AFT|BEF|BET|CAL|EST|FROM|TO и ничего больше. Т.е. сработает для
строки "AFT", но не сработает для "foo AFT bar".

Ответить

Номер ответа: 4
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #4 Добавлено: 03.09.06 21:17
Павел, спасибо!
Вы дали хорошее решение.
В примере одна группа и все ОК.
Для нескольких групп, наверное, проще преобразовывать пустые строки в Nothing?

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 03.09.06 21:21
А что вы имеете в виду под двумя группами? Можно на примере?

Ответить

Номер ответа: 6
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #6 Добавлено: 04.09.06 06:55
Регулярное выражение:
reg = New Regex(";((?<pref1>;(ABT|AFT|BEF|BET|CAL|EST|FROM|TO))\s)?(?<date1>;(\d{0,2}\s\D{3}\s\d{1,4})|\d{1,4})\s?(?<pref2>;(AND|TO))?\s?(?<date2>;(\d{0,2}\s\D{3}\s\d{1,4})|\d{1,4})?";)

Группы:
        Dim pref1 = reg.Match(s).Groups("pref1";).Value
        Dim date1 = reg.Match(s).Groups("date1";).Value
        Dim pref2 = reg.Match(s).Groups("pref2";).Value
        Dim date2 = reg.Match(s).Groups("date2";).Value

Я делаю так:
        If pref1 = "" Then pref1 = Nothing
        If pref2 = "" Then pref2 = Nothing
        If date1 = "" Then date1 = Nothing
        If date2 = "" Then date2 = Nothing

Ответить

Номер ответа: 7
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #7
Добавлено: 04.09.06 07:20
Да, вобщем-то правильно... Только вот так никогда не делайте:

Dim pref1 = reg.Match(s).Groups("pref1";).Value


Всегда надо указвать тип переменных. Всегда.

Ответить

Номер ответа: 8
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #8 Добавлено: 04.09.06 08:06
Спасибо, учту.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам