C # Regex частичное совпадение строк - PullRequest
1 голос
/ 11 февраля 2009

каждый, у меня есть функция ниже, чтобы возвращать истину, если ввод - плохое слово

public bool isAdultKeyword(string input)
{
    if (input == null || input.Length == 0)
    {
        return false;
    }
    else
    {
        Regex regex = new Regex(@"\b(badword1|badword2|anotherbadword)\b");
        return regex.IsMatch(input);
    }
}

Функция выше соответствует только всей строке, т. Е. Если введено плохое слово, оно не будет совпадать, но будет, когда введено bawrod1.

что я пытаюсь сделать, это получить соответствие, когда часть ввода содержит одно из плохих слов

Ответы [ 5 ]

1 голос
/ 29 октября 2010

Ваш метод работает нормально. Можете ли вы уточнить, что с ним не так? Моя программа тестирования ниже показывает, что она прошла несколько тестов без сбоев.

using System;
using System.Text.RegularExpressions;

namespace CSharpConsoleSandbox {
  class Program {
    public static bool isAdultKeyword(string input) {
      if (input == null || input.Length == 0) {
        return false;
      } else {
        Regex regex = new Regex(@"\b(badword1|badword2|anotherbadword)\b");
        return regex.IsMatch(input);
      }
    }

    private static void test(string input) {
      string matchMsg = "NO : ";
      if (isAdultKeyword(input)) {
        matchMsg = "YES: ";
      }
      Console.WriteLine(matchMsg + input);
    }

    static void Main(string[] args) {
      // These cases should match
      test("YES badword1");
      test("YES this input should match badword2 ok");
      test("YES this input should match anotherbadword. ok");

      // These cases should not match
      test("NO badword5");
      test("NO this input will not matchbadword1 ok");
    }
  }
}

Выход:

YES: YES badword1
YES: YES this input should match badword2 ok
YES: YES this input should match anotherbadword. ok
NO : NO badword5
NO : NO this input will not matchbadword1 ok
1 голос
/ 03 сентября 2010

Попробуйте:

Regex regex = new Regex(@"(\bbadword1\b|\bbadword2\b|\banotherbadword\b)"); 
return regex.IsMatch(input);
1 голос
/ 11 февраля 2009

Возможно, вам не придется делать это таким сложным способом, но вы можете попытаться реализовать Кнут-Моррис-Пратт . Я пытался использовать его в одном из моих неисправных (полностью по моей вине) модулей-усилителей распознавания.

1 голос
/ 11 февраля 2009

Итак, по вашей логике, вы бы подошли как к заднице?

Кроме того, помните классическое место Сканторп - ваш взрослый фильтр должен иметь возможность пропустить это слово.

0 голосов
/ 26 февраля 2009

Является ли \ b границей слова в регулярном выражении?

В этом случае ваше регулярное выражение ищет только целые слова. Удаление этих совпадений будет соответствовать любым вхождениям плохих слов, в том числе тем, где они были включены как часть более крупного слова.

Regex regex = new Regex(@"(bad|awful|worse)", RegexOptions.IgnoreCase);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...