помогите с рег. выражением
От: pogopogo  
Дата: 21.12.05 12:38
Оценка:
выбрать две идущие друг за другом цифры или одну цифру если ни перед выбираемой последовательности цифр ни после не следуют другие цифры.
Пример:
Исходная последовательность
1213 14 8 17x161
Нужно чтоб выбралось
14 8 17
Re: помогите с рег. выражением
От: Socrat Россия  
Дата: 21.12.05 15:02
Оценка:
Здравствуйте, pogopogo, Вы писали:

P>выбрать две идущие друг за другом цифры или одну цифру если ни перед выбираемой последовательности цифр ни после не следуют другие цифры.

P>Пример:
P>Исходная последовательность
P>1213 14 8 17x161
P>Нужно чтоб выбралось
P>14 8 17


\d — цифра
\D — не цифра

Вот и комбинируй.
Re: помогите с рег. выражением
От: mefrill Россия  
Дата: 22.12.05 14:59
Оценка:
Здравствуйте, pogopogo, Вы писали:

P>выбрать две идущие друг за другом цифры или одну цифру если ни перед выбираемой последовательности цифр ни после не следуют другие цифры.

P>Пример:
P>Исходная последовательность
P>1213 14 8 17x161
P>Нужно чтоб выбралось
P>14 8 17

Из примера получается, что перед цифрой всегда должны быть пробелы. Поэтому надо поставить \s перед выражением. Заглянуть за цифры у тебя не получится если в языке РВ нет специального оператора / для этого. Поэтому лучше сделать так: \s[0-9]{1,2}[^0-9]. Сначала идет пробел, затем одна или две цифры, но при условии, что следом за ними будет идти не цифра. Но проблема в том, что будет выбираться лишний символ соответствующий выражению [^0-9] и с этим ничего не поделать. Если у тебя дотнетовская библиотека, то можно эту проблему решить с помощью групп: \s(?<nums>[0-9]{1,2})[^0-9]. Тогда, когда у тебя будет выбираться строка типа 17х, ты сможешь черз имя группы nums взять оттуда цифры 17.
Re[2]: помогите с рег. выражением
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 03.01.06 05:49
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Из примера получается, что перед цифрой всегда должны быть пробелы. Поэтому надо поставить \s перед выражением. Заглянуть за цифры у тебя не получится если в языке РВ нет специального оператора / для этого. Поэтому лучше сделать так: \s[0-9]{1,2}[^0-9]. Сначала идет пробел, затем одна или две цифры, но при условии, что следом за ними будет идти не цифра. Но проблема в том, что будет выбираться лишний символ соответствующий выражению [^0-9] и с этим ничего не поделать. Если у тебя дотнетовская библиотека, то можно эту проблему решить с помощью групп: \s(?<nums>[0-9]{1,2})[^0-9]. Тогда, когда у тебя будет выбираться строка типа 17х, ты сможешь черз имя группы nums взять оттуда цифры 17.

А еще можно использовать positive lookahead и lookbehind:
(?<=\D)\d\d?(?=\D)
http://rsdn.org/File/5743/rsdn@home2.gif 1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.