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


如果字符串末尾有语言环境(_en_ja),请在语言环境之前添加_exact。
如果_exact已经存在,请不要再次添加。
如果结尾没有语言环境,也没有确切的语言环境,请在字符串末尾添加_exact


例如。:


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))$


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

最佳答案

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

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


RegEx Demo


(?!.*_exact(?:_en|_ja)?$)是否定的超前行为,它会跳过以_exact_exact_en_exact_ja结尾的输入。

10-07 16:28
查看更多