Как можно улучшить функцию checkForSpam, чтобы она корректно проверяла содержание ненужных слов (spam и sale), даже если в слове "spam" есть дополнительные символы, такие как квадратные скобки?
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