求一正则表达式

b87936260 2012-12-19 10:35:38

比如一段英文:'Sorry, I can't go out today!'
这么切割成一个一个的单词Sorry I can't go out today.
我显示根据空格split,然后用replaceAll("\\p{P}", "");去掉所有标点符号,
但是can't也变成cant了,有什么更好的方法吗?
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2012-12-19
  • 打赏
  • 举报
回复

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);
_jerrytiger 2012-12-19
  • 打赏
  • 举报
回复
str = str.replaceAll("(?<![a-zA-Z])'", "") //先将前面没有字母的 ' 符号删掉 .replaceAll("[\\p{Punct}&&[^']]", "");
安特矮油 2012-12-19
  • 打赏
  • 举报
回复
\\p{P}\\s+这样去split试试
b87936260 2012-12-19
  • 打赏
  • 举报
回复
引用 1 楼 is_zhoufeng 的回复:
\\p{P} 代表什么字符? 这样试试 replaceAll("[\\p{P}&&[^']]", "");
\\p{P}这个是代表所有的标点符号。你这个意思是对于“'”这个标点不过滤是吗?但是'Sorry, I can't go out today!'这句话中前后两个单引号都要过滤掉,只对组合词中的单引号不过滤
_jerrytiger 2012-12-19
  • 打赏
  • 举报
回复
\\p{P} 代表什么字符? 这样试试 replaceAll("[\\p{P}&&[^']]", "");
b87936260 2012-12-19
  • 打赏
  • 举报
回复
用了5L的方法,8楼后来看到的,貌似也不错,呵呵,现就这样,谢谢各位!!
  • 打赏
  • 举报
回复
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());
Never_say_mind 2012-12-19
  • 打赏
  • 举报
回复
你用substring吧,我刚才试了一下,不会把can't变成cant
Never_say_mind 2012-12-19
  • 打赏
  • 举报
回复
用substring这个属性返回一个新字符串试试

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧