Регулярное выражение для получения последнего двоеточия в строке и всего после него

2

Я пытаюсь написать регулярное выражение, которое получит последнее ":" и все после него. Это мое регулярное выражение в С#:

Regex rx5 = new Regex(@"[A-Za-z.][^\s][^:]{1,}$",RegexOptions.Singleline); 

он работает, за исключением того, что он включает в себя::. Как я могу получить все после ":" , не включая ":" ?

  • 0
    :([^:]*)$ будет подходящим шаблоном, но в будущем regexr.com станет вашим другом.
Теги:

6 ответов

11

Не используя регулярное выражение, но String.LastIndexOf и Substring()

2

Вам лучше сделать str.Substring(str.LastIndexOf(':') + 1).

Регулярные выражения являются мощными, но не пытайтесь использовать их, когда есть более простой подход.

2

Я бы использовал это регулярное выражение:

^(?:[^:]*:)+([^:]*)$

Первая группа совпадений будет содержать остальное после последнего :.

1

Или вы можете просто использовать следующий шаблон:

Regex rx5 = new Regex("[^:]+)$",RegexOptions.Singleline);
  • 0
    +1, но отбросьте бесполезный модификатор Singleline. На самом деле, это не относится ни к одному из других ответов.
  • 0
    Выражение: "[^:]+)$" является недопустимым синтаксисом (несоответствующие скобки). Кроме того (после исправления) это выражение ошибочно соответствует строкам без двоеточий.
1

Используйте группу, и вы также можете переписать регулярное выражение на что-то более простое:

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
}
1

Используйте lookbehind для того, чтобы не включать последний ":"

 Regex rx5 = new Regex("(?<=:)([^:]*)$",RegexOptions.Singleline);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню