Написание эффективных регулярных выражений начинается с формулировки того, что вам действительно нужно. В вашем случае это выглядит так, как будто вы хотите:
«Заменить все периоды символами новой строки, если только период не является частью числа».
И чтобы сделать это еще более точным, определим Что это означает, что точка является частью числа: это, вероятно, означает, что за ним непосредственно следует число, так что оно соответствует 5.4
, но также .4
в The average score of .4 was low.
, но не 4.
в She only counted a total of 4.
. ]
«Заменить все периоды символами новой строки, если за точкой сразу не следует цифра».
import re
text = '"I have .5 dollar. I need 5.4 dollar. But they only gave me 3."'
expression = re.compile(r'\.(?!\d)')
print(expression.sub('\n', text))
Вместо этого ваш пример \D(\.)
соответствовал: «Соответствует одному символу это не цифра, за которой следует буквальное .
", которое вы не хотели заменить.
Новое выражение \.(?!\d)
соответствует «Соответствует литералу .
, но только если за ним не следует цифра». Он использует то, что называется негативным взглядом, подробнее об этом здесь https://www.regular-expressions.info/lookaround.html
Я получил эту ошибку при использовании Episerver. Я просто изменил оператор возврата в контроллере от
return View();
к
return PartialView();
Эта ошибка может возникнуть (и возникает), когда есть несоответствие между данными, которые метод действия контроллера передает представлению, и типом данных, которые ожидает представление. Обычно это не проявляется как ошибка сборки, даже в случае предварительно скомпилированных представлений.
Например, если у меня есть метод...
public ActionResult Create()
{
// Do something
return View(new CustomerCreateViewModel());
}
... и представление Create с атрибутом Page...
<%@ Page ... Inherits="System.Web.Mvc.ViewPage<CustomerDetailsViewModel>" %>
... это компилируется и собирается без ошибок. Однако, когда я вызову действие Create, я получу желтый экран, потому что метод действия Create выбрасывает данные одного типа, а представление ожидает данные другого типа. Возможно, вы захотите проверить, что ваши типы совпадают...
Вы абсолютно уверены, что это не связано с данными, передаваемыми в представление? Вы каждый раз выполняете полную перестройку?
Эти ошибки обычно возникают из-за того, что частичное представление пытается использовать модель представления, переданную в ViewPage, когда модель представления, переданная в частичное представление, равна null. Я понимаю, что вы подразумеваете, что ошибка каким-то образом вызвана процессом сборки, но я не понимаю, как это возможно. Может ли быть так, что развернутый сайт использует другую базу данных, чем сайт, который вы запускаете на своей машине разработки, и могут ли данные (или отсутствие данных) в этой базе данных быть причиной проблемы?
.Вызывает ли сборка какие-либо предупреждения или ошибки?
Правильно ли настроены ваши зависимости? Например. просмотров в зависимости от модели. Build выясняет, в каком порядке компилировать вещи, глядя на указанные зависимости. Например. если вы измените модель и представление будет скомпилировано до того, как модель попадет в затруднительное положение ...
Это исчезнет, если вы не компилируете представления?
Также ваши представления наследуют System.Web.Mvc .ViewPage
или System.Web.Mvc.ViewPage
где T ваша модель?
Даже если типы совпадают, вы можете получить эту ошибку, когда в частичное представление передается значение null.
Вы можете исправить это, вызвав RenderPartial
с пустым ViewDataDictionary
следующим образом:
helper.RenderPartial("~/Views/Player/PlayerName.ascx", player, new ViewDataDictionary());
Для справки, я нашел это решение по адресу:
renderpartial с нулевой моделью передается неправильный тип
Перед назначением модели пользовательскому элементу управления из вашего представления создайте экземпляр этого конкретного объекта в конструкторе модели / объекта.
Пример:
public class MainEntity
{
public SubEntity AssociatedEntity;
public MainEntity()
{
// This is where the instantiation happen.
AssociatedEntity = new SubEntity();
}
}
public class SubEntity
{
public string property1;
}
Ваша страница просмотра:
<%@ Page Title="" Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MyNamespace.Models.MainEntity>" %>
....
<%Html.RenderPartial("ucMyUserControl",Model.AssociatedEntity);
....
Ваш пользовательский элемент управления:
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.SubEntity>" %>
....
<%Html.TextBoxFor(m=>m.Property1);