有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个包含word的String列表。有些单词的开头或/和结尾有撇号,如下所示:

apple
'orange
banana'
joe's

我只想删除以下单词开头和结尾的撇号:

apple
orange
banana
joe's

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

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

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

但它与^{}一起工作: enter image description here

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

谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    如果计划删除行首或行尾的单引号,则需要启用多行模式(例如,可以使用内联修饰符(?m)):

    (?m)^'|'$
    

    由于^$是锚定、零宽度断言,因此不需要使用lookaround将这些锚定括起来

    如果您确实计划匹配未包含单词字符的',请使用基于单词边界的解决方案:

    \B'\b|\b'\B
    

    regex demo

    详细信息

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

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

    myString = myString.replaceAll("\\B'\\b|\\b'\\B", "");
    
  2. # 2 楼答案

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

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

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