猿问

如何使用正则表达式从字符串中删除破折号(-),除了 java 中的数字和单词?

我正在尝试从字符串中删除破折号、下划线和多余的空格。


下面是我试过的代码:


public class Hello {


   public static void main(String args[]) {



          String blogName = "ABCD            __________________________________________________                      Size:      1234-5678 BAR                     8956-7896       ----------           CAR                     8756-2365";


          String nameWithProperSpacing = blogName.replaceAll("\\s+", " ").replaceAll("-", "").replaceAll("_", ""); 


          System.out.println( nameWithProperSpacing );

    }

}

不过,我不希望它从单词和数字之间删除它们。例如,我当前的代码将 8956-7896 更改为 89567896。


我想要的输出:


ABCD Size:1234-5678 BAR 8956-7896 CAR 8756-2365


饮歌长啸
浏览 168回答 5
5回答

LEATH

您将需要使用前瞻和后视进行搜索&nbsp; &nbsp; &nbsp; String nameWithProperSpacing = blogName&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .replaceAll("(?<![a-zA-Z0-9])[-_](?![a-zA-Z0-9])", "") ///No -_ not inside a word&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .replaceAll("\\s+", " "); /// only 1 space between words

MYYA

您想要实现的目标可以简单地通过(保留单个破折号,删除多个破折号)来完成:blogName.replaceAll("\\-(\\-)+","");

梦里花落0921

您可以使用非单词边界\B来删除它们,但要做到这一点,您必须先删除下划线:String&nbsp;nameWithProperSpacing&nbsp;=&nbsp;blogName.replaceAll("\\s+",&nbsp;"&nbsp;").replaceAll("_+",&nbsp;"").replaceAll("\\B-+|-+\\B",&nbsp;"");

慕神8447489

试试这个,不漂亮但适用于您的示例:.replaceAll("\\s+",&nbsp;"&nbsp;") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replaceAll("--",&nbsp;"").replaceAll("__",&nbsp;"").replaceAll("&nbsp;_",&nbsp;"") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replaceAll("_&nbsp;",&nbsp;"").replaceAll("&nbsp;-",&nbsp;"").replaceAll("-&nbsp;",&nbsp;"") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replaceAll("&nbsp;&nbsp;",&nbsp;"&nbsp;").trim();

斯蒂芬大帝

另一个解决方案:String&nbsp;nameWithProperSpacing&nbsp;=&nbsp;blogName.replaceAll("([^A-Za-z0-9])(\\-|\\s|_)+",&nbsp;"$1&nbsp;");
随时随地看视频慕课网APP

相关分类

Java
我要回答