我的努力:我试过看类似的问题,但我无法弄清楚我的答案。我也尝试使用网络(https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/)自己解决这个问题,但我无法得到正确的答案。尝试使用myString.replaceAll("_.+/[^.]*/", "");
我有一个字符串:String myString = "hello_AD123.mp3";
我想使用正则表达式java来删除下划线(包括它)之后的所有内容并在(.mp3)之前停止。我该怎么做?
所以我希望最终结果如下:myString = "hello.mp3";
答案 0 :(得分:1)
你的正则表达式不起作用,因为它匹配了字符串中缺少的东西:
_
- 后跟下划线...... .+
- 除换行符之外的任何一个或多个字符/
- 文字/
符号[^.]*
- 零点以外的零个或多个字符/
- 文字/
。输入字符串中没有斜杠。
您可以使用
String myString = "hello_AD123.mp3";
myString = myString.replaceFirst("_.*[.]", ".");
// OR myString = myString.replaceFirst("_[^.]*", "");
System.out.println(myString);
模式_[^.]*
匹配下划线,然后匹配除文字点以外的0+个字符。 如果字符串在.mp3
之前有点,则"_.*[.]"
匹配_
直到最后.
,并且需要替换为{{ 1}}。
请参阅regex Demo 1和Demo 2。
<强>详情:
.
- 匹配_
_
- 匹配零或更多(由于[^.]*
量词)字符以外的字符(因为使用了否定字符类,请参阅*
)字面点(如字符类中的[^...]
- .
- 被视为文字点字符(句号,句点)。
[...]
- 匹配除换行符之外的0个或更多字符,直到最后一个字点(使用点,因此,替换模式应为.*[.]
)。
使用"."
是因为我们只需要执行单搜索和替换操作。当匹配的子字符串匹配时,它将替换为空字符串,因为替换模式为.replaceFirst()
。