Java:使用正则表达式摆脱字符后跟 1 位或 2 位数字 (0-15)
Java: Get rid of a Character followed by a 1 or 2 Digit Number (0-15) using Regular Expressions
我想从某些字符串中删除一个字符后跟一个数字 (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,我想摆脱它!
- 实际:@12@144@5some @16which i @15want to @0get rid of!
在此先致谢,如有任何帮助,我们将不胜感激!
@(?:\d|1[0-5])(?!\d)
或 java
@(?:\d|1[0-5])(?!\d)
通过empty string
尝试this.Seedemo.Replace
在 Java 中,您不要用 /
包围正则表达式。此外,.
需要在 @
和第一个数字之间有一个字符。最后,^
只会匹配字符串的开头。因此,
String regex = "/^@.([0-9]|1[0-5])/";
应该是
String regex = "@([0-9]|1[0-5])";
最后,为了防止匹配三位数、四位数等序列,添加否定前瞻:
String regex = "@([0-9]|1[0-5])(?![0-9])";
您可以像这样使用 Regex :
public static void main(String a[]) {
String s1 = "@01Test";
String s2 = "@10Test";
String s3 = "@16Test";
String s4 = "@15Test";
System.out.println(s1.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
System.out.println(s2.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
System.out.println(s3.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
System.out.println(s4.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
}
O/P :
Test
Test
@16Test
Test
我想从某些字符串中删除一个字符后跟一个数字 (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,我想摆脱它!
- 实际:@12@144@5some @16which i @15want to @0get rid of!
在此先致谢,如有任何帮助,我们将不胜感激!
@(?:\d|1[0-5])(?!\d)
或 java
@(?:\d|1[0-5])(?!\d)
通过empty string
在 Java 中,您不要用 /
包围正则表达式。此外,.
需要在 @
和第一个数字之间有一个字符。最后,^
只会匹配字符串的开头。因此,
String regex = "/^@.([0-9]|1[0-5])/";
应该是
String regex = "@([0-9]|1[0-5])";
最后,为了防止匹配三位数、四位数等序列,添加否定前瞻:
String regex = "@([0-9]|1[0-5])(?![0-9])";
您可以像这样使用 Regex :
public static void main(String a[]) {
String s1 = "@01Test";
String s2 = "@10Test";
String s3 = "@16Test";
String s4 = "@15Test";
System.out.println(s1.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
System.out.println(s2.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
System.out.println(s3.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
System.out.println(s4.replaceAll("@(0[0-9]|1[0-5])(?=Test)", ""));
}
O/P :
Test
Test
@16Test
Test