【问题标题】:Java Regex to use regex to keep expected string and remove othersJava Regex 使用正则表达式来保留预期的字符串并删除其他字符串
【发布时间】:2016-02-02 12:19:07
【问题描述】:

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

我有一个包含字符和数字的字符串。 例如:

str1="012345m67890man"

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

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

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

实际输出:012345m67890man

预期输出:01234567890man

如果我的字符串有除 man 以外的任何字母字符,我需要删除它。

请帮助我提出建议。

【问题讨论】:

    标签: java regex


    【解决方案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

    【讨论】:

    • 为了更快地删除使用+非数字量词:"(man)|[^0-9]+"
    • @WikitorStribizew 非常感谢wiktor。你能通过合适的例子帮助我了解 $1 在正则表达式中的用法吗?
    • 如果我添加的细节不够,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多