Я пытаюсь написать регулярное выражение, которое получит последнее ":" и все после него. Это мое регулярное выражение в С#:
Regex rx5 = new Regex(@"[A-Za-z.][^\s][^:]{1,}$",RegexOptions.Singleline);
он работает, за исключением того, что он включает в себя::. Как я могу получить все после ":" , не включая ":" ?
Не используя регулярное выражение, но String.LastIndexOf и Substring()
Вам лучше сделать str.Substring(str.LastIndexOf(':') + 1).
Регулярные выражения являются мощными, но не пытайтесь использовать их, когда есть более простой подход.
Я бы использовал это регулярное выражение:
^(?:[^:]*:)+([^:]*)$
Первая группа совпадений будет содержать остальное после последнего :
.
Или вы можете просто использовать следующий шаблон:
Regex rx5 = new Regex("[^:]+)$",RegexOptions.Singleline);
"[^:]+)$"
является недопустимым синтаксисом (несоответствующие скобки). Кроме того (после исправления) это выражение ошибочно соответствует строкам без двоеточий.
Используйте группу, и вы также можете переписать регулярное выражение на что-то более простое:
Regex rx5 = new Regex(":([^:]*)$",RegexOptions.Singleline);
Затем у вас есть:
Match ma = rx5.Match("test:1:2:3");
if (ma.Success)
{
// your content is in ma.Groups[1].Value
}
Используйте lookbehind для того, чтобы не включать последний ":"
Regex rx5 = new Regex("(?<=:)([^:]*)$",RegexOptions.Singleline);
:([^:]*)$
будет подходящим шаблоном, но в будущем regexr.com станет вашим другом.