我需要使用正则表达式的帮助。
我有一个包含字符和数字的字符串。 e.g:
str1="012345m67890man"
我想只保留子字符串“man”和数字。 我不需要任何其他字母字符。
我正在使用以下正则表达式,但它也显示“m”字符。
str1 = str1.replaceAll("[^(man0-9)]", "");
实际输出:012345m67890man
预期产出:01234567890man
如果我的字符串中包含除man之外的任何字母字符,我需要将其删除。
请帮助我提出建议。
答案 0 :(得分:1)
您可以匹配并捕获man
,然后匹配除数字以外的所有字符并将其删除:
str1 = str1.replaceAll("(man)|[^0-9]", "$1");
请参阅regex 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
。