I am looking for a pattern that can find apostrophes that are inside single quotes. For example the text
Foo \'can\'t\' bar \'don\'t\'
I want to find and replace
You can use the following regular expression:
'[^']+'\s|'[^']+(')[^' ]+'
it will return 3 matches, and if capture group 1 participated in the word, it will be the apostrophe in the word:
't''t'demo
How it works:
'[^']+'\s
' match an apostrophe[^']+ followed by at least one character that isn't an apostrophe' followed by an apostrophe\s followed by a space| or'[^']+(')[^' ]+'
' match an apostrophe[^']+ followed by at least one character that isn't an apostrophe(') followed by an apostrophe, and capture it in capture group 1[^' ]+ followed by at least one character that is not an apostrophe or a space' followed by an apostropheI believe you need to require "word" characters to appear before and after a ' symbol, and it can be done with a word boundary:
\b'\b
See the regex demo
To only match the quote inside letters use
(?<=\p{L})'(?=\p{L})
(?<=[[:alpha:]])'(?=[[:alpha:]])
(?U)(?<=\p{Alpha})'(?=\p{Alpha}) # Java, double the backslashes in the string literal
Or ASCII only
(?<=[a-zA-Z])'(?=[a-zA-Z])