Как можно избавиться от ненужных символов в заданной строке?

Как можно улучшить функцию checkForSpam, чтобы она корректно проверяла содержание ненужных слов (spam и sale), даже если в слове "spam" есть дополнительные символы, такие как квадратные скобки?
  • 23 ноября 2023 г. 13:41
Ответы на вопрос 2
1. Для удаления ненужных символов в заданной строке вы можете использовать регулярное выражение совместно с методом `re.sub()`. Например, следующий код удаляет все символы, кроме букв и цифр:

```python
import re

def remove_unwanted_chars(string):
    return re.sub(r'\W+', '', string)
```

2. Чтобы улучшить функцию `checkForSpam()` и проверять наличие ненужных слов, даже если они содержат дополнительные символы, вы можете использовать регулярные выражения с оператором `re.search()`. Например, следующий код проверяет наличие слова "spam" или "sale" в строке, игнорируя дополнительные символы:

```python
import re

def checkForSpam(string):
    if re.search(r'\b(spam|sale)\b', string, re.IGNORECASE):
        return True
    return False
```

Это регулярное выражение `\b(spam|sale)\b` ищет точное совпадение со словами "spam" или "sale" в строке, игнорируя регистр символов. Опция `re.IGNORECASE` используется для того, чтобы поиск был регистронезависимым.
// Проверяет, содержит ли сообщение спам
const checkForSpam = function (message) {
  const cleanedMessage = message.toLowerCase().replace(/[^a-z\s]/g, '');
  const words = cleanedMessage.split(' ');
  return words.includes('spam') || words.includes('sale');
}

console.log(checkForSpam('[SPAM] How to earn fast money?')); // true

// Но я бы не зашивал в функцию исчерпывающий перечень стоп слов, а передавал их в нее:
const checkForSpam = function (message, stopWords) {
  const cleanedMessage = message.toLowerCase().replace(/[^a-z\s]/g, '');
  const words = cleanedMessage.split(' ');
  return stopWords.some(word => words.includes(word));
}

console.log(
  checkForSpam(
    '[SPAM] How to earn fast money?',
    ['spam', 'sale']
  )
); // true
Похожие вопросы