gpt4 book ai didi

Java:使用正则表达式摆脱字符后跟 1 位或 2 位数字 (0-15)

转载 作者:行者123 更新时间:2023-11-30 11:10:18 26 4
gpt4 key购买 nike

我想从某些字符串中删除一个字符后跟一个数字 (0-15) 的所有序列。

我不是很喜欢正则表达式,我尽了最大努力但没有想出解决这个问题的方法。

对于数字序列,我使用了:http://utilitymill.com/utility/Regex_For_Range

表示顺序的字符我用了“@”

需要进行以下替换:

  • @12Test --> 测试(替换@12)
  • @0Test --> 测试(替换@0)
  • @16Test --> @16Test(@16没有替换,只有0-15)

为了测试正则表达式,我创建了以下 JUnit 测试用例:

public class ReplacementTests {
@Test
public void testNoReplacement1() {
String actual = "Should nothing happen with this String";
String expected = "Should nothing happen with this String";
actual = appendRegexReplacement(actual);
assertEquals(expected, actual);
}

@Test
public void testNoReplacement2() {
String actual = "12Should 5nothing 16happen2 with this13 String";
String expected = "12Should 5nothing 16happen2 with this13 String";
actual = appendRegexReplacement(actual);
assertEquals(expected, actual);
}

@Test
public void testReplacement() {
String actual = "@12There @144are @5some @16which i @15want to @0get rid of!";
String expected = "There @144are some @16which i want to get rid of!";
actual = appendRegexReplacement(actual);
assertEquals(expected, actual);
}

private String appendRegexReplacement(String replacement) {
String regex = "/^@.([0-9]|1[0-5])/";
return replacement.replaceAll(regex, "");
}

前两个测试按预期运行。第三个测试(实际上需要进行替换)结果如下:

  • 预计:@144 有一些我想摆脱的@16!
  • 实际:@12There @144are @5some @16which i @15want to @0get rid up!

提前致谢,如有任何帮助,我们将不胜感激!

最佳答案

在 Java 中,您不用 / 包围正则表达式。此外,. 需要在 @ 和第一个数字之间有一个字符。最后,^ 只会匹配字符串的开头。因此,

String regex = "/^@.([0-9]|1[0-5])/";

应该是

String regex = "@([0-9]|1[0-5])";

最后,为了防止匹配三位数、四位数等序列,添加否定前瞻:

String regex = "@([0-9]|1[0-5])(?![0-9])";

关于Java:使用正则表达式摆脱字符后跟 1 位或 2 位数字 (0-15),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27741462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com