Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   По регулярному выражению выбрать часть текста (http://forum.oszone.net/showthread.php?t=348859)

blackeangel 25-05-2021 15:39 2958925

По регулярному выражению выбрать часть текста
 
Всем доброго времени суток.
Есть регулярное выражение
^(АБВГ|ДЕЖЗ)\.\d+{6}\.\d+{3}
Надо из строки
АБВГ.123456.789.ДЕЖЗ9876-23
Получить
АБВГ.123456.789

Как это сделать регулярными выражениями?

Предложение типа rsplit использовать не предлагать.

Iska 25-05-2021 17:13 2958926

Цитата:

Цитата blackeangel
Надо из строки
АБВГ.123456.789.ДЕЖЗ9876-23 »

Ещё примеры строк, пожалуйста. С десяток.

shisik 25-05-2021 17:46 2958927

Выражения \d+{6} и \d+{3} некорректны. + обозначает 1 или более символов, а {3} - ровно 3.

blackeangel 25-05-2021 20:57 2958938

Да всё,я уже отмучился)
Если интересно, то так
Код:

Sub MMM()
SS = "АБВГ.123456.789.ДЕЖЗ9876-23"
With CreateObject("VBScript.RegExp")
  .Pattern = "^[А-Яа-я]{4}\.\d{6}\.\d{3}(\-\d{1,3})?"
  MsgBox (.Execute(SS).Item(0))
 End With
End Sub


blackeangel 25-05-2021 21:15 2958939

Но, но, красивые исполнения, тоже можно поглядеть ;)

Iska 25-05-2021 22:04 2958942

Цитата:

Цитата blackeangel
Да всё,я уже отмучился) »

Ещё нет.

1. Что это за «?» в конце выражения?
2. Сначала нужно сделать .Test() и, если данный метод вернёт True — только тогда выполнять метод .Execute() и обращаться к классу MatchCollection.

blackeangel 25-05-2021 22:07 2958944

Iska, 1. Что данное в скобках может быть, а может и не быть. Вы мне сами когда то в 2017 году делали такое :)
2. Согласен. Всё должно быть красиво. И правильно.

shisik 25-05-2021 23:13 2958949

Цитата:

Цитата Iska
1. Что это за «?» в конце выражения? »

Опциональная часть (\-\d{1,3})?

blackeangel, кстати если из содержимого скобок не нужно создавать группу в результате, то можно поставить ?:

Код:

(?:\-\d{1,3})?


Время: 23:41.

Время: 23:41.
© OSzone.net 2001-