【问题标题】:Regex to remove blacklisted words from a sentence正则表达式从句子中删除列入黑名单的单词
【发布时间】:2011-11-04 17:01:56
【问题描述】:

如何使用正则表达式过滤掉列入黑名单(淫秽)字词的列表,例如 如果黑名单中的单词类似于“Bill Joseph”

 Then 'I am Bill Josephine' is valid
    but 'I am Bill Joseph.' is invalid
        'I am Bill Joseph,' is invalid
        'I am Bill Joseph ' invalid
        'I am Bill Joseph<any non alphanumeric>' is invalid.

    Similarly 'I am .Bill Joseph' is invalid
              'I am <any non alphanumeric>Bill Joseph' is invalid.

【问题讨论】:

  • 'I am Bill Josephine' 有效,但 'I am Bill Josephine' 无效....O_o
  • 如果 Bill Joseph 应该是列入黑名单的词,那么为什么它们中的任何一个都是有效的?似乎您更多的是询问如何使用正则表达式来确保字符串是单词
  • 哦,抱歉,我在发布问题时犯了一个错误。我现在已经改正了。
  • 我想我只是看不出黑名单字 (bill joseph) 与示例有什么关系

标签: java regex oracle


【解决方案1】:

简单,而且可行:

String badStrRegex = "\\WBill Joseph\\W?";
Pattern pattern = Pattern.compile(badStrRegex);
Matcher m = pattern.matcher(testStr);  //testStr is your string under test
boolean isBad = m.find();

有效!!已针对您的所有输入进行了测试。

【讨论】:

    【解决方案2】:

    使用字母数字字符类的否定:

    "[^A-Za-z0-9]比尔约瑟夫[^A-Za-z0-9]"

    使用“\W”代替“[^A-Za-z0-9]”在大多数情况下都可以使用,除非在名称之前/之后有下划线。所以“Bill Joseph_”仍然会被视为有效。

    【讨论】:

      【解决方案3】:

      确保单词被单词边界".*\\b" + badWord + "\\b.*"包围

      【讨论】:

      • 不,他希望任何一方将“Bill Joseph”与非字母数字相匹配。
      猜你喜欢
      • 2021-05-06
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 2021-08-07
      • 2020-01-25
      • 1970-01-01
      相关资源
      最近更新 更多