Как с помощью регулярного выражения найти символ, который не является частью слова?

Как использовать регулярное выражение для поиска буквы, не являющейся частью слова? Например, ищем букву И (без учета регистра): "Книга" = false, "Книга и тетрадь" = true, "1+1 И 2+2" = true, "Беги" = false.
  • 22 мая 2024 г. 15:50
Ответы на вопрос 3
Для поиска символа, который не является частью слова, можно использовать регулярное выражение \b\b. 

Для поиска буквы, не являющейся частью слова "И" (без учета регистра), можно использовать следующее регулярное выражение: \b[^иИ]\b. 

Пример использования в Python:

```python
import re

# Паттерн для поиска буквы "И" (без учета регистра), не являющейся частью слова
pattern = r'\b[^иИ]\b'

# Текст для поиска
text1 = "Книга"
text2 = "Книга и тетрадь"
text3 = "1+1 И 2+2"
text4 = "Беги"

# Поиск по паттерну
result1 = re.search(pattern, text1, re.IGNORECASE)
result2 = re.search(pattern, text2, re.IGNORECASE)
result3 = re.search(pattern, text3, re.IGNORECASE)
result4 = re.search(pattern, text4, re.IGNORECASE)

print(bool(result1))  # False
print(bool(result2))  # True
print(bool(result3))  # True
print(bool(result4))  # False
```
К сожалению \b в JS для русского языка не применим. 
Придётся явно указывать буквы, считая что у нас нормальные слова (состоят только из русских букв).

const re = /(?<![а-яё])и(?![а-яё])/ig;
console.log(re.test('Книга'));           // false
console.log(re.test('Книга и тетрадь')); // true
т.е. слева и справа от буквы должен быть пробел, либо знак препинания, либо начало, либо конец строки? В такой формулировке сам поймешь как сделать? 

p.s. еще есть \b - граница слова, любая буква \w тогда регулярка /\b\w\b/
Похожие вопросы