【问题标题】:Remove dash from string but not from middle when its surrounded by (a-z)当它被 (a-z) 包围时,从字符串中删除破折号而不是从中间删除
【发布时间】:2020-04-08 20:41:23
【问题描述】:

我读过类似的问题,但这些问题并不能完全回答我的问题。

我想从我的字符串中删除任何破折号,但不是像我的示例测试用例那样被 (a-z) 或 (A-Z) 包围的字符串中间的破折号。

我已经使用了这个正则表达式代码,但它清除了所有破折号:

string.replaceAll("\\-", "");

测试用例

  • --好
  • -好
  • g-ood*
  • g--ood
  • 好-
  • 好--

结果

  • g-ood*

【问题讨论】:

    标签: java regex string hyphen


    【解决方案1】:

    使用正则表达式是正确的做法。但是,您的正则表达式正在捕获 每个 连字符。您需要的是检查前后的字母。

    ((?<!\w)-|-(?!\w))
    

    此正则表达式将查找在 OR 后面没有任何内容的连字符并替换它们。

    使用这个正则表达式,您可以像以前一样用任何内容替换这些事件。

    string.replaceAll("((?<!\\w)-|-(?!\\w))", "");
    

    here is a regex101 for you to test more cases

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多