Помогите подправить регулярное выражение
От: Аноним  
Дата: 26.03.10 10:25
Оценка:
На вход приходит строка типа:
"Двигатель: Б/1,4л/55kW Кузов: универсал"
Я хочу разобрать строку на:
Б
1,4л
55
универсал

Сначала написал такое выражение:
"^Двигатель: (?<enginetype>([Б|Д]))[/](?<enginevalue>([\d]+[,][\d]+[л]))[/](?<enginekw>([\d]+))[kW Кузов: ]"

Оно работает, но как вы могли заметить, не выбирает тип кузова "универсал".
Добавляю к выражению мачинг типа кузова:
"^Двигатель: (?<enginetype>([Б|Д]))[/](?<enginevalue>([\d]+[,][\d]+[л]))[/](?<enginekw>([\d]+))[kW Кузов: ](?<carbodytype>([.]+$))"
и выражение перестает вообще работать. В итоге все элементы GroupCollection пустые.
Пробовал так:
"^Двигатель: (?<enginetype>([Б|Д]))[/](?<enginevalue>([\d]+[,][\d]+[л]))[/](?<enginekw>([\d]+))[kW Кузов: ](?<carbodytype>(универсал|хэтчбек|седан))";
аналогично — не работает.

Есть подозрение что у меня пробелы в образовании
Помогите пожалуйтса.
Re: Помогите подправить регулярное выражение
От: Пельмешко Россия blog
Дата: 26.03.10 10:40
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Есть подозрение что у меня пробелы в образовании


Несомненно, хорошенько почитайте Regular Expression Language Elements, там полный и хороший референс по дотнетовым регвырам.

А>Помогите пожалуйтса.


1. Внутри [] перечисляется неупорядоченный набор символов, | работает как ИЛИ только вне [], внутри [] будет просто символом '|'.
2. [kW Кузов: ] — это НАБОР символов, а не литерал "kW Кузов: "!!!
3. Зачем группировать внутри группы?
4. [.]+ — это одно или более повторений символа '.', а не ЛЮБОГО символа.

Как-то так:

^Двигатель: (?<enginetype>[БД])/(?<enginevalue>\d+,\d+л)/(?<enginekw>\d+)kW\s+Кузов:\s+(?<carbodytype>.+)$

или так:

^Двигатель: (?<enginetype>[БД])/(?<enginevalue>\d+,\d+л)/(?<enginekw>\d+)kW\s+Кузов:\s+(?<carbodytype>универсал|хэтчбек|седан)$

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.