2015-10-23 3 views
2

(Работа с Regex в C#)Улучшение регулярных выражений с дополнительными значениями

Я несколько регулярных как выражения для разбора строки в нескольких областях. В одном из этих полей есть необязательный символ, который я не могу понять, как заставить его регулярное выражение разбить его. Я попытался улучшить его в одной строке, но я не мог этого сделать.

Мой вход:

4-002 TERMO CONTINENTAL 1 L N°3995 9.22 4-003 TERMO CONTINENTAL 2 N°3996 99.22 

Мой desidered выход:

Item[0].Code = 4-002 
Item[0].Detail = TERMO CONTINENTAL 1 L N°3995 
Item[0].Price = 9.22 

Item[1].Code = 4-003 
Item[1].Detail = TERMO CONTINENTAL 2 N°3996 
Item[1].Price = 99.22 

Моя последняя попытка:

Для раздельный оба предмета: (?=\d\-\d\d\d\s.*)
Это не работает, потому что некоторые коды: подобные 14-001 вместо 4-001
Я попытался с: ([\d]\d\-\d\d\d\s.*) но и не работает

ВОПРОС: Как я могу получить обе возможности? 14-001 и 4-001

И другие вещи, связанные с этой проблемой:
Чтобы отделить детали от цены: ([^\s]*$) (от одного элемента расщепляется раньше)
Чтобы отделить код от деталей: (\d\-\d\d\d\s) (та же проблема, как оригинальный вопрос)

Любая помощь с этим регулярным выражением будет полезной и оцененной.

Заранее благодарен!

+1

Попробуйте это:? (\ D + - \ D +) \ S ([^ \ d] + \ д \ с (л \ с) Н ° \ d +) \ s (\ d + \. \ d +). Хотя я рекомендую правильно разобрать это .Split и т. д. – Camo

+1

Попробуйте ['(\ d + - \ d +) \ s + (. *?) \ s + (\ d + \ . \ d +) '] (http://regexstorm.net/tester?p= (% 5CD% 2b-% 5CD% 2b)% 5cs% 2b (. *% 3f)% 5cs% 2b (% 5CD% 2b% 5с.% 5CD% 2b) и г = 4-002 + ТЕРМО + кОНТИНЕНТАЛЬНЫЙ + 1 + L + N% с2% b03995 + 9,22 + 4-003 + ТЕРМО + кОНТИНЕНТАЛЬНЫЙ + 2 + Н% с2% b03996 + 99,22). –

+2

Вы можете использовать '[\ d] {1,2} - [\ d] {3}' для первой части. –

ответ

2

Я считаю следующее регулярное выражение является безопасным для использования:

(\d+-\d+)\s+(.*?N°\d+)\s+(\d+\.\d+) 

См regex demo

Если Item.Detail может иметь какой-либо текст и расположен между digits - digits и значения с плавающей точкой, используйте

(\d+-\d+)\s+(.*?)\s+(\d+\.\d+) 

См another demo

Результаты:

enter image description here

См IDEONE demo

+0

Спасибо большое !!! Это отличный ответ. Позвольте мне попробовать! –

+1

Вот демон [IDEONE demo] (http://ideone.com/VfFb1I). –

1

Попробуйте

(\d+-\d\d\d)(.*?)(\d+\.\d\d) 

+ для одного или нескольких событий.

Смежные вопросы