我有一个包含单词的String
列表。有些单词在开头或/和结尾都有撇号:
apple
'orange
banana'
joe's
我想在这些单词的开头和结尾只删除撇号:
apple
orange
banana
joe's
我尝试使用以下正则表达式,但它不起作用:
myString.replaceAll("((?<=^)'|'(?=$))", "");
但它适用于regex101.com
:
为什么正则表达式不起作用,如何删除开头和结尾的撇号?
感谢您的帮助!
答案 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)", "");
谢谢你,抱歉这个愚蠢的问题。