regex,去掉字符串中不属于单词的标点符号



我有这个代码:

String s="  //wont won't won't ";
String[] w =  s.split("[\s+\/,\.!_\-?;:]++");

我不认为"被删除"不会,因为它是单词的一部分。我们将不胜感激但是//我真的不想//被除名吗。

所以我的问题是——如果某个标点符号是单词的一部分,比如";不会"我们有,但同时保持这个-

"[\s+\/,\.!_\-?;:]++"

您可以使用

String[] w = s.split("[\s+/,.!_\-?;:]+|\B'|'\B");

请参阅regex演示详细信息

  • [s+/,.!_-?;:]+-一个或多个空白,+/,.!_-?;:
  • |-或
  • B'-位于字符串开头或紧挨着前面有非单词字符的'
  • |-或
  • 'B-位于字符串末尾或紧跟非单词字符的'

查看Java演示:

String s ="  //wont won't won't ";
String[] w = s.split("[\s+/,.!_\-?;:]+|\B'|'\B");
System.out.println(Arrays.toString(w));
// => [, wont, won't, won't]

如果首先删除字符串开头的所有匹配项,则可以在开头删除空条目:

String regex = "[\s+/,.!_\-?;:]+|\B'|'\B";
String[] w2 = s.replaceFirst("^(?:"+regex+")+", "").split(regex);
System.out.println(Arrays.toString(w2));
// => [wont, won't, won't]

最新更新