日期:2014-05-19  浏览次数:20646 次

求一正则表达式

比如一段英文:'Sorry, I can't go out today!'
这么切割成一个一个的单词Sorry I can't go out today.
我显示根据空格split,然后用replaceAll("\\p{P}", "");去掉所有标点符号,
但是can't也变成cant了,有什么更好的方法吗?
------解决方案--------------------
\\p{P} 代表什么字符? 

这样试试
replaceAll("[\\p{P}&&[^']]", "");
------解决方案--------------------
\\p{P}\\s+这样去split试试
------解决方案--------------------
str = str.replaceAll("(?<![a-zA-Z])'", "")     //先将前面没有字母的 ' 符号删掉
   .replaceAll("[\\p{Punct}&&[^']]", "");
------解决方案--------------------

String s="'Sorry, I can't go out today!'";
//先把开头和结尾的'以及'前面不是字母的以及除了'外的其它标点符号先替换掉,再用空白字符进行分割
String[] sArray=s.replaceAll("^'+
------解决方案--------------------
'+$
------解决方案--------------------
(?<![A-Za-z])'+
------解决方案--------------------
[\\p{Punct}&&[^']]+","").split("\\s+");
System.out.println(sArray.length);
for(String str:sArray)
   System.out.println(str);

------解决方案--------------------
用substring这个属性返回一个新字符串试试
------解决方案--------------------
你用substring吧,我刚才试了一下,不会把can't变成cant
------解决方案--------------------
API查的源码 完美解决

Pattern p = Pattern.compile("'
------解决方案--------------------
,");
 Matcher m = p.matcher("'Sorry, I can't go out today!'");
 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, "");
 }
 m.appendTail(sb);
 System.out.println(sb.toString());