Я не эксперт в С#, я занимаюсь этим всего несколько месяцев.
У меня есть токен @Html.Raw(Model.Prices.SitePrice.Text)
, который отображает цену товара (9,99 долларов США)
Мне нужно было убрать знак $ с токена, поэтому я поставил @Html.Raw(Model.Prices.SitePrice.Text.Replace("$", ""))
Все это работает нормально. Проблема в том, что когда я применяю к этому продукту специальное продвижение / продвижение, он меняет отображаемый токен:
<strike>$9.99</strike> $7.99
он должен отображаться 7.99
после работы.
Я хочу удалить <stike>$##.##</strike>
с помощью подстановочного знака, чтобы иметь дело с любым числом между ударами.
Как лучше всего написать .replace() для этого текста? (должен быть встроенным для данных схемы Google)
Я пробовал:
@Html.Raw(Model.Prices.SitePrice.Text.Replace("$", "").Replace("<strike>[\r\n]+</strike> ", ""))
@Html.Raw(Model.Prices.SitePrice.Text.Replace("$", "").Replace("<strike>(.*)</strike> ", ""))
7 разных значений?
<strike>$9.99</strike> $7.99
должно отображаться 7.99
<strike>$10.99</strike> $8.99
должно отображаться 8.99
<strike>$199.00</strike> $188.00
должно отображаться 188.00
<strike>$20.00</strike> $18.50
должно отображаться 18.50
<strike>$4.20</strike> $2.20
должно отображаться 2.20
<strike>$12345.00</strike> $12225.00
должно отображаться 12225.00
Конечно, у вас должны быть «Цена» и «Цена со скидкой» (или что-то в этом роде) в качестве отдельных полей в вашей базе данных (как фактическая валюта/десятичный тип), а не хранить их в виде текста? Возможно, есть какая-то причина, по которой вы не можете, но мне кажется, что это был бы лучший способ сделать что-то.
к сожалению, я использую что-то под названием Hotcakes ecommerce, и это очень хитроумно. у него есть только одна ссылка как на цену, так и на цену со скидкой. очень надоедливый.
это просто невозможно с заменой? и просто пытаясь сделать то, что вы упомянули, мне просто нужно понять, как это написать: P
Конечно, смотрите ответ.
@Html.Raw(Regex.Replace(Model.Prices.SitePrice.Text, @"<strike>[\s\S]*</strike>", "").Trim().TrimStart('$'))
Спасибо, приятель, ценю помощь! Эта ошибка из-за The name 'Regex' does not exist in the current context
Должен быть в состоянии работать с тем, что вы мне дали. Спасибо
префикс Regex
с System.Text.RegularExpressions.
будет работать.
Большое спасибо! Литтлери просто понадобилось это для кода схемы Google. работает как шарм и многому научился. Куда отправить ящик пива?
Ага, смешные слова были уже ящик пива, правда его убрали :-<
Да, я как раз искал этот комментарий. Я добавлю это обратно в вопрос для вас!
Один вариант для рассмотрения:
@Html.Raw(new string(Model.Prices.SitePrice.Text.Reverse().TakeWhile(z => z != '$').Reverse().ToArray()))
Это займет текст в конце SitePrice
до (и не включая) $.
Reverse
означает, что он переворачивает строку. TakeWhile
доводит текст до $
. Reverse
переворачивает его обратно. new string
преобразует массив символов обратно в строку.
Спасибо, приятель, я тестировал .Reverse, но нарушил значение. Я попробовал ваш способ, и это тоже работает, просто не мог понять, что вы имели в виду раньше. Спасибо за ваш пример, помогает мне понять, как работают некоторые вещи.
Что я лично сделал бы, так это
Reverse
строку, затемTakeWhile
, пока символ не является$
, а затемReverse
снова (или используйтеLastIndexOf
иSubstring
, чтобы избежать необходимости вReverse
s). Это в основном получит все, начиная с конца строки после и заканчивая последним знаком $.