【问题标题】:Regex for replacing multiple spaces and dashes with or without spaces用于替换多个空格和带有或不带空格的破折号的正则表达式
【发布时间】:2014-09-17 11:22:17
【问题描述】:

我可以通过两个单独的正则表达式传递来做到这一点,但这已经很慢并且做两个没有帮助,所以我希望能够一次完成。

我想:

  • 用一个空格代替多个空格
  • 用空格替换破折号(连字符)

但是,如果破折号的两侧有空格,则破折号和两侧的任何空格都将仅替换为一个空格。

举个例子:

a - b c-d e -f g- h i  - j k -  l m  -  n

必须像这样结束

a b c d e f g h i j k l m n

我尝试过这样的事情:

\s+| - | -|- |-

但这不起作用:

a  b c d e  f g h i  j k   l m   n

【问题讨论】:

  • 你用的是什么系统?
  • 如果你有多个破折号应该怎么办?
  • 多个破折号被视为一个破折号,因此替换为一个空格
  • 我是用户 javascript 风格的正则表达式
  • 你也使用\s+但是`-`。除了空格字符之外,对空格的要求是什么? (制表符是最常见的)。

标签: regex


【解决方案1】:

使用以下正则表达式匹配多个空格或破折号;

[\s-]+

用一个空格替换。

【讨论】:

  • @Graham 之所以有效,是因为您将空格和连字符视为相同,即。如果你有一个包含空格和连字符的序列,你不在乎是什么 - 整个序列应该用一个空格替换。因此,它设置了一个字符组,即空格加连字符并查找出现这种情况的实例。
  • @Graham 你可以简单地问一个问题“如何用空格替换一个或多个破折号或空格?”
【解决方案2】:

[\s-]+ 带有全局 'g' 修饰符并替换为一个空格。 见here

【讨论】:

    【解决方案3】:

    正则表达式:

    (?:\s*-\s*)+|\s{2,}
    

    替换字符串:

    <space>
    

    DEMO

    【讨论】:

    • 不确定这是否适用于 a a b - a 等字符串,其中出现多个空格且字母之间没有连字符...
    • 如果没有连字符,这不会替换多个空格。
    • 不处理多个破折号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2022-09-22
    • 2018-07-27
    相关资源
    最近更新 更多