Java Regex使用正则表达式来保留预期的字符串并删除其他字符串

时间:2016-02-02 12:19:08

标签: java regex

我需要使用正则表达式的帮助。

我有一个包含字符和数字的字符串。 e.g:

str1="012345m67890man"

我想只保留子字符串“man”和数字。 我不需要任何其他字母字符。

我正在使用以下正则表达式,但它也显示“m”字符。

str1 = str1.replaceAll("[^(man0-9)]", "");

实际输出:012345m67890man

预期产出:01234567890man

如果我的字符串中包含除man之外的任何字母字符,我需要将其删除。

请帮助我提出建议。

1 个答案:

答案 0 :(得分:1)

您可以匹配并捕获man,然后匹配除数字以外的所有字符并将其删除:

str1 = str1.replaceAll("(man)|[^0-9]", "$1");

请参阅regex demo

IDEONE Java demo

String str1 = "012345m67890man";
str1 = str1.replaceAll("(man)|[^0-9]", "$1");
System.out.println(str1);

您可以阅读有关Backreferences at regular-expressions.info的更多信息:

  

如果正则表达式具有命名或编号的捕获组,则可以在替换文本中重新插入由任何捕获组匹配的文本。您的替换文本可以根据需要引用任意数量的组,甚至可以多次引用同一组。这使得可以以许多不同方式重新排列由正则表达式匹配的文本。举个简单的例子,正则表达式\*(\w+)\*匹配星号之间的单个单词,将单词存储在第一个(也是唯一的)捕获组中。替换文本<b>\1</b>将每个正则表达式匹配替换为捕获组在粗体标记之间存储的文本。

在Java中,我们基本上使用$n反向引用语法,而不是类似Perl的\n