Как сообщить регулярному выражению, что оно должно прекратиться после первого появления? - PullRequest
0 голосов
/ 20 мая 2010
string time = "Job started: donderdag 6 mei 2010 at 20:00:02"
var filterReg = new Regex(@".*:", RegexOptions.Compiled);
time = filterReg.Replace(time, String.Empty);

Можно ли остановиться после первого появления? так у первого ":".

Ответы [ 3 ]

3 голосов
/ 20 мая 2010

По какой причине вы используете регулярные выражения для получения простой подстроки?

time = time.Substring(time.IndexOf(":") + 1);
1 голос
/ 20 мая 2010

Используя более конкретное регулярное выражение

new Regex(@"^[^:]*:", RegexOptions.Compiled);

Ваш .*: делает это

  1. .* соответствует всем, жадно, поэтому он работает до конца строки.
  2. : пытается найти соответствие, поэтому механизм регулярных выражений возвращает один символ за раз (это называется обратным отслеживанием), чтобы найти соответствие. Останавливается на первом найденном двоеточии (видно с конца строки)

тогда как ^[^:]*: делает это:

  1. ^ привязывает регулярное выражение к началу строки. совпадений в середине строки не может быть.
  2. [^:]* соответствует всем, кроме двоеточий, жадно, поэтому он бежит прямо к первому двоеточию
  3. : может легко совпадать, потому что следующим символом является двоеточие. Готово.

Откат не требуется, это означает, что он также более эффективен.

0 голосов
/ 20 мая 2010

Используйте это регулярное выражение .*?: с перегрузкой Replace :

string time = "Job started: donderdag 6 mei 2010 at 20:00:02"
var filterReg = new Regex(@".*?:", RegexOptions.Compiled);
filterReg.Replace(time, String.Empty, 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...