Вы не можете использовать [^\']
для захвата текста, который содержит '
с помощью in, и в вашем примере This is Prashanth's book.
содержит символ '
внутри текста.Вам нужно изменить свое регулярное выражение, чтобы использовать .*?
вместо [^\']
, и вы можете написать свое регулярное выражение следующим образом:
(\w'\w)(*SKIP)(*F)|('.*?'\B)
Демо с обновленным регулярным выражением
Кроме того, вам не нужно избегать ни одной кавычки '
, поскольку в регулярном выражении это не имеет особого значения.
Из вашего примера неясно, хотите ли вы получить захваченное совпадениесодержать '
вокруг матча или нет.Если вы не хотите, чтобы '
были захвачены в матче, вы можете использовать регулярное выражение на основе поиска и использовать это,
(?<=\B').*?(?='\B)
Объяснение регулярного выражения:
(?<=\B')
- этот положительный взгляд гарантирует, что тому, что захватывается в матче, предшествует одинарная кавычка, которой не предшествует символ слова, что обеспечивается \B
.*?
- Захватывает текст без жадности (?='\B)
- Гарантирует, что за сопоставленным текстом следует одинарная кавычка, а \B
гарантирует, что он не соответствует кавычке, за которой сразу следует какой-либо символ слова.Например, он не будет соответствовать конечной кавычке, такой как 's
Демо