使用regex java替换某个字符前后的字符串

时间:2016-04-14 14:35:16

标签: java regex

我的努力:我试过看类似的问题,但我无法弄清楚我的答案。我也尝试使用网络(https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/)自己解决这个问题,但我无法得到正确的答案。尝试使用myString.replaceAll("_.+/[^.]*/", "");

我有一个字符串:String myString = "hello_AD123.mp3";

我想使用正则表达式java来删除下划线(包括它)之后的所有内容并在(.mp3)之前停止。我该怎么做?

所以我希望最终结果如下:myString = "hello.mp3";

1 个答案:

答案 0 :(得分:1)

你的正则表达式不起作用,因为它匹配了字符串中缺少的东西:

  • _ - 后跟下划线......
  • .+ - 除换行符之外的任何一个或多个字符
  • / - 文字/符号
  • [^.]* - 零点以外的零个或多个字符
  • / - 文字/

输入字符串中没有斜杠。

您可以使用

String myString = "hello_AD123.mp3";
myString = myString.replaceFirst("_.*[.]", ".");
// OR myString = myString.replaceFirst("_[^.]*", "");
System.out.println(myString);

请参阅IDEONE Java demo

模式_[^.]*匹配下划线,然后匹配除文字点以外的0+个字符。 如果字符串在.mp3 之前有点,则"_.*[.]"匹配_直到最后.,并且需要替换为{{ 1}}。

请参阅regex Demo 1Demo 2

<强>详情:

  • . - 匹配_
  • _ - 匹配零或更多(由于[^.]*量词)字符以外的字符(因为使用了否定字符类,请参阅*)字面点(如字符类中的[^...] - . - 被视为文字点字符(句号,句点)。

  • [...] - 匹配除换行符之外的0个或更多字符,直到最后一个字点(使用点,因此,替换模式应为.*[.])。

使用"."是因为我们只需要执行搜索和替换操作。当匹配的子字符串匹配时,它将替换为空字符串,因为替换模式为.replaceFirst()