На работе мне нужно регулярное выражение для соответствия различным видам продуктов в огромном старом каталоге, который был импортирован с цифровой поддержкой очень плохо (много ошибок, разные стили и т. Д.). Во время сопоставления я должен фиксировать тип продукта и его диаметр (значение внутри скобки). Наконец, я должен отменить неправильные форматированные записи (например, те, у которых плохие отформатированные комментарии).расширенное условное регулярное выражение с несколькими захватами и поисковыми окнами
Я новичок в регулярном выражении, и эта задача занимает у меня слишком много времени на мое планирование. На самом деле нужна помощь!
Вот что я должен и не должен соответствовать:
YES: "product type1(0)"
YES: "product type2(923)"
YES: "product type3(10)"
YES: "product type4(110.023) :here is a comment. It always starts with a semicolon"
YES: "product type1(14.4):comments can be just after product entry"
YES: "product type1(10.0) : spaces are not relevant"
YES: "product type1(0000.01) : this kind of entry is acceptable"
NO: "product type1(asd)"
NO: "product type1(12a3.02)"
NO: "product type2(0.)"
NO: "product type2(0.123.123)"
NO: "product type2(0...)"
NO: "product type3(0.asd)"
NO: "product type4(10)" comment doesn't start with a semicolon
Вот моя попытка. Я знаю, что мне нужно улучшить его с помощью шаблонов и взглядов. Мои проблемы возникают именно тогда, когда я пытаюсь использовать условное регулярное выражение, которое олицетворяет образы. Простое объяснение приветствуется.
^product (type1|type2|type3|type4)\(([0-9]+\.?[0-9]+)\)[ ]+;?
спасибо.
В .NET вы также можете использовать '(? m)" (тип продукта [1-4] \ (\ d + (?: \. \ d +)? \) (? (\ s *:) \ s *: [^ "] *?) | \ s *)" \ s * (? = $ | \ p {Zl}) 'с условным выражением (если вы заинтересованы, я буду пост в качестве ответа). См. Http://goo.gl/gE7Dk0. –