【问题标题】:Remove Special Chars and Word chars after Special Chars followed by Whitespace in Java删除特殊字符后的特殊字符和单词字符,然后是 Java 中的空格
【发布时间】:2013-09-27 05:49:23
【问题描述】:

如果标题不清楚,这里是例子

我想删除字符串中的所有特殊字符,特殊字符后的单词字符后跟一个空格。

String = "Here is the world's first movie. #movie";

对于上面的例子,我需要像这样的输出

"Here is the world first movie movie";

我尝试了很多正则表达式来实现这一点,但我不能尝试跟随

replaceAll("[^\\w]\\w{1}\\s", " ");

但它不起作用,你能告诉我正则表达式并解释一下吗?

提前致谢

编辑: 要求是我想删除#movie 中的特殊字符,并且还想删除带有单个字符后跟空格的特殊字符,如world's favorite 中的最终输出应该是world favorite

特殊字符之后的字符很可能是's'。例如 world's, India's, john's

【问题讨论】:

  • 假设 # 是您的特殊字符...在 #movie 之后没有空格。所以来源是错误的。您的输出缺少.。请查看。
  • 对我来说很好用(替换's),你还记得将replaceAll 的结果分配给某个东西吗?
  • 如果特殊字符后跟没有,一个或多个单词字符,然后是空格,您是否要删除它们,以便替换 's. 而不是 #movie,因为有后面没有空格?意思类似于this?
  • @PeterRader 我想删除所有非 Word 字符,所以输出中没有 .

标签: java regex replaceall


【解决方案1】:
    String input = "Here is the world's first movie. #movie";
    String output = input.replaceAll("[!@#$%^&*][a-z]+", "");
    System.out.println(output);

正则表达式 - [!@#$%^&*][a-z]+

   [!@#$%^&*] - tests for special character for the first character
   [a-z]+ - tests for word

【讨论】:

  • 虽然它确实处理了#movie,但它也应该处理了[. ](不要忘记空格),但#movie后面没有白色空间,所以要么来源错误,要么要求错误 - 只是说;)
  • @MadProgrammer 我想要的是删除所有特殊字符为[!@#$%^&*.,:;],删除特殊字符和下一个单词或任何字符,直到像world's most 这样的空格最终输出应该是“世界上最多的”
【解决方案2】:

最后我通过多次试验和错误使它工作,最终的正则表达式字符串是[^a-zA-Z\\s]s?(\\s)?

str.replaceAll("[^a-zA-Z\\s]s?(\\s)?", "$1");

这里是解释,

[^a-zA-Z\\s]s? => 查找除空格外的所有特殊字符,后跟一或零s

(\\s)? => 后跟一个 1 或 0 的空格。

在这里我将(\\s) 分组,因为我想在replaceAll() 函数中使用它作为第二个参数替换为$1

答案是

String orig = "Here is the world's first movie. #movie";`
System.out.println(orig..replaceAll("[^a-zA-Z\\s]s?(\\s)?", "$1"));

最终输出为Here is the world first movie movie

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2021-10-16
    • 2014-08-17
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多