【问题标题】:replace apostrophe ' in the middle of the word with \' in java在java中用\'替换单词中间的撇号'
【发布时间】:2017-06-23 16:50:38
【问题描述】:

我有一个 XPath

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

我想将其输出为

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

我正在使用此代码

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

但它正在输出

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

我在 StackOverflow 上找不到类似的问题。如果有,请在 cmets 中发布链接。

【问题讨论】:

  • 试试property.replaceAll("\\b'\\b", "\\\\'");。或者,如果您真的是指字母之间,.replaceAll("(?<=\\p{L})'(?=\\p{L})", "\\\\'")
  • 工作,回答问题,我会接受并投票。你知道我在哪里可以学到这些东西吗?
  • 请注意:输入不是有效的 XPath,所需的输出也不是有效的 XPath。如果您希望它作为 Java 字符串文字中的有效 XPath 表达式,那么对于 XPath 1.0,您需要 //*[@text=\"ab'cd\"],而对于 XPath 2.0,另一种选择是 //*[@text='ab''cd']
  • @MichaelKay 应该如何自动化这个 //*[@text=''80s']。 80 年代是文本。
  • 如果是 XPath-1.0-embedded-in-Java,请使用 "//*[@text=\"'80s\"]"

标签: java regex xpath backslash apostrophe


【解决方案1】:

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

(?<=\p{L}) 是正向回溯,需要在当前位置的左侧紧接一个字母,(?=\p{L}) 是正向回溯,需要在当前位置右侧紧邻一个字母。

替换参数应该是"\\\\'",用一个反斜杠替换需要4个反斜杠。

Java demo

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

【讨论】:

  • 应该如何自动化这个 //*[@text=''80s']。 80 年代是文本。
  • 你有//*[@text=''80s']作为一个完整的输入字符串吗?
  • 是的,这是一个字符串,我想将其转换为 //*[@text=\"'80s\"]
  • 这看起来不像。试试s.replaceAll("(\\[@\\w+=)'(.*?)']", "$1\"$2\"]")
猜你喜欢
  • 2017-08-18
  • 2018-05-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多