在 java 中将单词中间的撇号 ' 替换为 \'

replace apostrophe ' in the middle of the word with \' in java

我有一个 XPath

//*[@title='ab'cd']

我想将其输出为

//*[@title='ab\'cd']

我正在使用此代码

property = property.replaceAll("^[a-zA-Z]+(?:'[a-zA-Z]+)*", "\'");

但是正在输出

//*[@text='ab'cd']

我在 Whosebug.if 上找不到类似的问题,请在评论中 post link

要替换两个字母之间的 ',您需要一个 (?<=\p{L})'(?=\p{L}) 正则表达式。

A (?<=\p{L}) 是正向后视,需要紧靠当前位置左侧的字母,(?=\p{L}) 是正向后视,需要紧靠当前位置右侧的字母.

替换参数应为 "\\'",需要 4 个反斜杠才能替换为单个反斜杠。

参见Java demo

String s= "//*[@title='ab'cd']";
System.out.println(s.replaceAll("(?<=\p{L})'(?=\p{L})", "\\'"));