【问题标题】:How to remove specific ending of words in a file on Java?如何删除Java文件中特定单词的结尾?
【发布时间】:2018-05-24 07:21:28
【问题描述】:

我想删除文件中所有单词的结尾,例如将所有 -ed(工作、喜爱、毁坏、Photoshopped、操纵)删除到(工作、爱情、毁坏、Photoshopp、操纵)

我不知道该怎么做,我正在寻找正则表达式语法,但我得到的是最后只删除一个符号

 aLine = aLine.replaceAll("[\\<ed>]\\b", "");

输入是:

坐在家里的打字机前用photoshop处理

我明白了:

坐在 hom work Photoshop 的打字机前

最简单的方法是什么?

【问题讨论】:

  • aLine = aLine.replaceAll("ed\\b", "")
  • 您的正则表达式匹配:“&lt;ed&gt; 中的任何一个,后跟一个单词边界”[] 定义一组字符,其中一个字符需要匹配.通过简单地写出序列来定义需要匹配的字符序列,即ed 就像上面的评论中一样
  • 你是在寻找词根,也就是词干吗?
  • 我想做一些类似词干的东西,但没有必要像应该的那样做:) 删除一些结尾和开头就足够了
  • 给新人的建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(投票至少需要 15 声望)点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请看【相关帮助中心文章】[1] [1]:stackoverflow.com/help/someone-answers

标签: java regex file


【解决方案1】:

我建议使用以下正则表达式:

(?<=\w)ed\b

DEMO

说明:

  • (?&lt;=\w)(?&lt;=[a-zA-Z]) 强制ed 左边有一个单词字符,或者一个字母(限制它是单词的一部分)
  • \b 强制该字符后跟一个单词边界字符

然后根据你的代码调整它:

String input="I have worked a lot and ruined my health but I have loved my job even if "
        + "I habe been manipulated and ruined by this Photoshopped picture. "
        + "Ed and Eddy are happy today even if they have partied the whole night. ";

String output=input.replaceAll("(?<=\\w)ed\\b", "");
System.out.println(output);

输出:

I have work a lot and ruin my health but I have lov my job even if I habe been manipulat and ruin by this Photoshopp picture. Ed and Eddy are happy today even if they have parti the whole night. 

正则表达式快速入门表:http://www.rexegg.com/regex-quickstart.html

泛化

(?<=\w)[a-zA-Z]{2}\b

如果您想删除所有单词的最后 2 个字母(输入字符串中的长度超过 2 个字符),您可以使用此正则表达式

改进:

也可以删除后向并简单地使用以下正则表达式:\Bed\b 用于 ed-结尾词和 \B[a-zA-Z]{2}\b 删除所有单词的最后 2 个字母(输入中超过 2 个字符字符串)

感谢revo 的改进!

【讨论】:

  • 您可以删除lookbehind并使用边界:\Bed\b
  • @revo: 是的,那更好 ;-) 因为有些语言不喜欢向后看/向前看,谢谢!!! ;-) 我已经编辑了我的帖子
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多