powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / RegEx - квантификатор группы
14 сообщений из 14, страница 1 из 1
RegEx - квантификатор группы
    #35937642
Astronom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, плиз.
Есть строка, содержащая внутри последовательность вида " AF09 BC54 3421 ", мне нужно ее найти
Если задаю регекс как "[A-F0-9]{4}\ ", то находит первую группу
А если пишу "([A-F0-9]{4}\ ){3}", что по моему мнению должно найти все три группы, то не работает
Что я делаю не так?
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35937721
Kew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
$_ = "1ED5 76DD 0986 asd asd";
s/([A-F0- 9 ]{ 4 }\ ){ 3 }/gotcha!/;
print;
=>
Код: plaintext
gotcha!asd asd
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35937729
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Astronom, у меня так все находит .NET овские регэкспы. Может попробовать \\ - вдруг в языке, которым вы пользуетесь \ - зарезервированный Escape символ. Или вообще не ставить этот бекслеш
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35937776
Astronom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай - пишу на VB.NET
Kew, а что значит s/ в начале строки?

belugin4, бэкслеш тут как спецсимвол используется, я хотел так пробел выделить. Ну, собственно вот так
([A-F0-9]{4}\s){3}
тоже не работает
Конструкция типа
^.*([A-F0-9]{4}\s){3}.*$
также не находит ничего

А если расширить задачу?
Найти подстроку максимальной длины, в которой будут содержаться все группы, состоящие из четырех символов [A-F0-9], разделенные пробелом.
Например, для строки
dcnsb dsjcndiusc 679В 5462 dcisnci dcnsjcnds G432 F678 5432 7890 nxshicbi dcdcb FA54
должно вернуть
G432 F678 5432 7890
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35937866
morph11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Расширяем...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
dcnsb dsjcndiusc 679B  5462  dcisnci dcnsjcnds G432 F678  5432   7890  nxshicbi dcdcb FA54

(?:[ 0 -9A-F]{ 4 }(\s+|\Z))+

  679B  5462  
  F678  5432   7890  
  FA54


Возвращает максимально длинные последовательности из 4х указанных символов.
Строка с G вообще-то никак не может вернуться, потому как G идет после F
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35937937
Astronom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По всей видимости, проблема у меня не с регэкспами, а с получением результатов.
Делаю так
Код: plaintext
1.
2.
3.
4.
        Dim test_str = " BUBUIBVUB 0440 4АВЕ 5025 88F9 MKMOMNINB"
        Dim RegExPattern As String = "(?:[0-9A-F]{4}(\s+|\Z))+"
        Dim RegExObj As Regex = New Regex(RegExPattern)
        MsgBox(Regex.Match(test_str, RegExPattern).Value)
На мой взгляд, оно должно мне выдать первое совпадение в строке (0440 4АВЕ 5025 88F9 ), но возвращается пустая строка
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938049
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В тестовой строке русские символы

попробуйте сначала отладить регексп тулом
http://www.radsoftware.com.au/regexdesigner/

http://regulator.sourceforge.net
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938108
morph11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На шарпе, в ВБ переделать легко -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Regex r = new Regex(@"(?<str>(?:[0-9A-F]{4}(\s+|\Z))+)", RegexOptions.IgnoreCase | RegexOptions.RightToLeft);
Match m = r.Match(text);
while (m.Success)
{
	string s = m.Groups["str"].Value;
	// ...
	// ...
	m = m.NextMatch();
}

А там внутре уже выбираешь самую длинную
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938137
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ?: нафиг?
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938164
morph11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
belugin4,

(Noncapturing group.) Does not capture the substring matched by the subexpression.

Есть мнение, что т.к. вам не нужны составлящие подгруппы, то и выдавать их не стоит.
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938200
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
morph11 Это для быстродействия?
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938366
morph11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
belugin4,

Немного быстрее. На небольших объемах вообще незаметно.
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938378
morph11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроме того, если снаружи кто-то обращается к результатам выражения по номерам группы, то внутри этого тега(?) можно делать исправления, не опасаясь, что нумерация собьется.
...
Рейтинг: 0 / 0
RegEx - квантификатор группы
    #35938464
Astronom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за помощь, кажется я все понял.
belugin4 огромное спасибо за ссылку, с этой тулзой стало сразу все понятно, она показывает какие группы создаются и т.п.
к Match.Value можно обращаться только если нет групп внутри выражения, иначе нужно брать Groups, внутри них Captures
Либо использовать группы с ?: , тогда группы не создаются в результате, а получается несколько Captures
В общем, пойду пробовать новое знание на практике :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / RegEx - квантификатор группы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]