C # регулярное выражение - не соответствует моей строке - PullRequest
1 голос
/ 23 декабря 2011

Я использую NET 2.0 с WinForms на C #.У меня большая проблема с регулярным выражением.Я пытаюсь добавить двоеточие к 4 или более буквенных слов в простой строке.Добавлять двоеточие нужно только один раз, после этого код больше не должен добавляться.

Regex lbls = new Regex(@"^\s*(?<lbl>[A-Za-z0-9_]{4,})", RegexOptions.Multiline); // Use a regex to obtain all 4 letter words in string
MatchCollection matches = lbls.Matches(text); // text is my string

foreach (Match m in matches)
{
  string mm = m.Groups["lbl"].Value; // Matches are stored in this group.
  if (!Regex.IsMatch(text, @"^\s*\b" + mm + @":\b", RegexOptions.Multiline))
  {
    text = Regex.Replace(text, @"\b" + mm + @"\b", mm + ":", RegexOptions.Multiline);
  }
}

Предположим, строка "TEST"Это означает, что вывод должен быть "ТЕСТ:", который это.Однако, если код запускается еще раз, текст должен оставаться «TEST:», но это не так, и вместо этого это «TEST ::».Колоны продолжают добавляться.Почему это?Мое утверждение if выглядит полностью правильным.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Попробуйте заменить ^([A-Za-z0-9_]{4})(?!:) на $1:, где $1 - первая группа.

1 голос
/ 23 декабря 2011

При первом запуске кода вы ищете значение «TEST» во входных данных (которое просто «TEST»), заменяете его на «TEST» и добавляете двоеточие в конец.

Таким образом, после первой итерации, результатом будет «TEST:».

Во второй раз, когда вы запускаете свой код, вы ищете значение «TEST» в вашем входе (который сейчас "TEST: ") и заменив его на" TEST "и добавив в конце двоеточие.

Так что после второй итерации результатом будет" TEST :: ".

Похоже на васДобавлять двоеточие в конец можно только в том случае, если двоеточие не существует (может быть?).

Попробуйте изменить строку «если» на эту ...

if ( !Regex.IsMatch( text , @"\b" + mm + @"\b:" , RegexOptions.Multiline ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...