我想要捕获单引号文本,但转义单引号(\')不应被视为分隔符, 例如:
这不是最好的一天
将返回
- 不是最好的
感谢。
我试过这个:
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'来”
答案 0 :(得分:1)
答案 1 :(得分: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
你在寻找吗?
答案 2 :(得分:0)
(?<!\\\\)'([^'\\\\]|\\\\.)*'
使用负向lookbehind确保起始引用不会被转义