使用正则表达式

时间:2017-11-13 08:31:55

标签: java regex regex-lookarounds

我要求字符串必须包含_exact。我正在使用Java。

  • 如果字符串末尾有区域设置(_en_ja),请在区域设置之前添加_exact。
  • 如果_exact已存在,请勿再次添加。
  • 如果最后没有区域设置,并且没有确切的话,请在字符串的末尾添加_exact

E.g:

  • something - > something_exact
  • something_en - > something_exact_en
  • something_ja - > something_exact_ja
  • something_exact_en - > something_exact_en
  • something_exact - > something_exact

我花了一些时间想出了2个正则表达式,如果在相同的字符串上连续运行,那就让它成为可能。我不确定它们是否涵盖了所有可能的情况。

  

^(.*)(?<!_exact)(_(?:en|ja))$

     

^(.*)(?<!_exact)(?<!_(?:en|ja))$

如果有人能帮助我提出一个完成这项工作的正则表达式,那就太棒了!谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

str = str.replaceAll("^(?!.*_exact(?:_en|_ja)?$)(.+?)(_en|_ja)?$", "$1_exact$2");

RegEx Demo

  • (?!.*_exact(?:_en|_ja)?$)是一个消极的预测,它会跳过以_exact_exact_en_exact_ja结尾的输入。