прошу помощи с регэкспом

Автор MinasFilm, 17 ноября 2014, 00:56

0 Пользователи и 1 гость просматривают эту тему.

MinasFilm

задача:
из строк вида
Крепление для CZ 550, pivot, single piece 30mm, h=18mm
удалить куски с размерами (числомм), оставив высоту (h=числоmm)
Для этого сделал регэксп:
,? *[0-9,\.] *(mm|мм) *
но он, ессно, "заденет" и куски вида h=18mm, чего допустить никак нельзя

нид хелп

fuel

#1
Цитата: MinasFilm от 16 ноября 2014, 22:56,? *[0-9,\.] *(mm|мм) *
А что "\d" не работает и надо "0-9"?

,? *Не понятно - а где здесь литеры? В таком виде не совпадёт ни с "single piece", ни с "h=".

Определите также что будет экранированием. Слева у вас получается не только запятая, а если она всегда - то зачем одиночный не жадный "?", справа всегда "(mm|мм)".

,\ *h\ *=\ *[\d,\.]\ *(mm|мм)\ *Отрицать такую конструкцию нужно. Но чтоб совпадало с
,(\ *[^\ \d,\.]+\ *)+\=?\ [\d,\.]\ *(mm|мм)\ *Тут вопросы:
- в тексте типа "single piece" могут попадаться "\d\."?
- символ "\=" может появляться только перед "[\d,\.]\ *(mm|мм)\ *"?
Землю - рабочим, фабрики - крестьянам!

rami

Цитата: MinasFilm от 16 ноября 2014, 22:56задача:
из строк вида
Крепление для CZ 550, pivot, single piece 30mm, h=18mm
удалить куски с размерами (числомм), оставив высоту (h=числоmm)
Если нужно удалить только (числомм), то пишем найти:
[:digit:]+mm                         обратите внимание: самый первый символ в регэкспе пробелзаменить: ничего не пишем (пусто)
Результат: Крепление для CZ 550, pivot, single piece, h=18mm
Но это не будет работать если числа будут не целыми или миллиметры будут обозначаться "мм", а не "mm". Если что-то будет не правильно, приведите примеры не правильного.

RAN