使用正则表达式删除单词开头或结尾处的撇号

时间:2017-03-26 21:26:49

标签: java regex intellij-idea

我有一个包含单词的String列表。有些单词在开头或/和结尾都有撇号:

apple
'orange
banana'
joe's

我想在这些单词的开头和结尾只删除撇号:

apple
orange
banana
joe's

我尝试使用以下正则表达式,但它不起作用:

myString.replaceAll("((?<=^)'|'(?=$))", "");

它在IntelliJ中不起作用: enter image description here

但它适用于regex101.comenter image description here

为什么正则表达式不起作用,如何删除开头和结尾的撇号?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果您打算在该行的开头或结尾删除单引号,则需要启用多行模式(例如,您可以使用内联修饰符(?m)执行此操作):

(?m)^'|'$

由于^$是锚点,零宽度断言,因此您无需使用外观来封装这些锚点。

如果您真的打算匹配未使用字词括号的',请使用基于字边界的解决方案:

\B'\b|\b'\B

请参阅regex demo

<强>详情:

  • \B'\b - 一个前面带有非字边界的'(可能在'之前有字符串的开头或非字字符),后跟一个字边界('之后必须有一个字char)
  • | - 或
  • \b'\B - 一个',前面有一个单词边界,后跟一个非单词边界。

在Java中,不要忘记使用\b\B的双反斜杠:

myString = myString.replaceAll("\\B'\\b|\\b'\\B", "");

答案 1 :(得分:-1)

我理解我的错误,我忘了做作业......

myString = myString.replaceAll("(\B'\b)|(\b'\B)", "");

谢谢你,抱歉这个愚蠢的问题。