0

我想捕获一个单引号文本,但是不应将转义的单引号 (\') 视为分隔符,例如:

这不是最好的一天

将返回

  • 不是最好的

谢谢。

我试过这个:

    public static List<String> cropQuoted (String s) {

    Pattern p = Pattern.compile("\\'[^']*\\'");
    Matcher m = p.matcher(s);
    ArrayList found = new ArrayList();
    while(m.find()){
        found.add(m.group().replaceAll("\'", ""));
        System.out.println(m.group().replaceAll("\'", ""));
    }
    return found;
}

但它未能捕捉到“\'best'days'to come”

4

3 回答 3

1

正则表达式可能如下所示:

"'([^'\\\\]|\\\\.)*'"

就像在一个单引号'后跟 0 到多个既不是单引号也不是反斜杠的字符中一样,或者是一个反斜杠后跟任何字符,后跟一个单引号。

看到这个正则表达式

于 2012-06-02T20:11:32.583 回答
1

(?<!\\\\)'意思是“前面'没有\

使用它我们可以创建这样的东西(?<!\\\\)'.*?(?<!\\\\)'

让我们测试一下

    String s="This 'wasn\\'t the best' day. Another 't\\'es\\'t Test' t\\'est";
    System.out.println(s.replaceAll("(?<!\\\\)'.*?(?<!\\\\)'", "X"));
    //out -> This X day. Test X t\'est

是你要找的吗?

于 2012-06-02T20:47:18.023 回答
0
(?<!\\\\)'([^'\\\\]|\\\\.)*'

使用否定的lookbehind确保起始报价不会被转义

于 2012-06-02T20:45:50.493 回答