На вход приходит строка типа:
"Двигатель: Б/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>(универсал|хэтчбек|седан))";
аналогично — не работает.
Есть подозрение что у меня пробелы в образовании
Помогите пожалуйтса.
Здравствуйте, Аноним, Вы писали:
А>Есть подозрение что у меня пробелы в образовании
Несомненно, хорошенько почитайте
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>универсал|хэтчбек|седан)$