为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2023-05-17 15:02:16
我正在尝试从字符串中删除破折号、下划线和多余的空格。下面是我试过的代码: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
查看完整描述

5 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

您将需要使用前瞻和后视进行搜索


      String nameWithProperSpacing = blogName

              .replaceAll("(?<![a-zA-Z0-9])[-_](?![a-zA-Z0-9])", "") ///No -_ not inside a word

              .replaceAll("\\s+", " "); /// only 1 space between words


查看完整回答
反对 回复 2023-05-17
?
MYYA

TA贡献1868条经验 获得超4个赞

您想要实现的目标可以简单地通过(保留单个破折号,删除多个破折号)来完成:

blogName.replaceAll("\\-(\\-)+","");


查看完整回答
反对 回复 2023-05-17
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

您可以使用非单词边界\B来删除它们,但要做到这一点,您必须先删除下划线:

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



查看完整回答
反对 回复 2023-05-17
?
慕神8447489

TA贡献1780条经验 获得超1个赞

试试这个,不漂亮但适用于您的示例:

.replaceAll("\\s+", " ")
            .replaceAll("--", "").replaceAll("__", "").replaceAll(" _", "")
            .replaceAll("_ ", "").replaceAll(" -", "").replaceAll("- ", "")
            .replaceAll("  ", " ").trim();


查看完整回答
反对 回复 2023-05-17
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

另一个解决方案:

String nameWithProperSpacing = blogName.replaceAll("([^A-Za-z0-9])(\\-|\\s|_)+", "$1 ");



查看完整回答
反对 回复 2023-05-17
  • 5 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信