【问题标题】:Remove spaces between words only not between numbers仅删除单词之间的空格,而不是数字之间的空格
【发布时间】:2015-08-18 04:26:31
【问题描述】:

我有一个由单词、特殊字符(*、|、(等)和数字(浮动)组成的字符串。我想只删除单词和特殊字符之间的空格。不应删除数字之间的空格。如何我可以在 Perl 中做到吗?

例如:

Rama 1 * 2.34 * ( L - 0.45 ) XYZ 10 20.05 30.06 40 P > 25.

应该是转换后的:

Rama1*2.34*(L-0.45)XYZ 10 20.05 30.06 40 P>25.

【问题讨论】:

  • 提示:\d 匹配正则表达式中的数字,\D 匹配非数字
  • 那为什么XYZ 10 有空格,而Rama1 没有呢?

标签: regex perl


【解决方案1】:
(?<!\d)\h+|\h+(?!\d)

您可以在此处使用lookarounds。查看演示。

https://regex101.com/r/uF4oY4/62

【讨论】:

    【解决方案2】:

    您可以使用以下基于环视的正则表达式。

    perl -pe 's/\s+(?=\D)|(?<=\D)\s+//g' file
    

    示例:

    $ echo 'Rama 1 * 2.34 * ( L - 0.45 ) XYZ 10 20.05 30.06 40 P > 25.' | perl -pe 's/\s+(?=\D)|(?<=\D)\s+//g'
    Rama1*2.34*(L-0.45)XYZ10 20.05 30.06 40P>25.
    

    $ echo 'Rama 1 * 2.34 * ( L - 0.45 ) XYZ 10 20.05 30.06 40 P > 25.' | perl -pe 's/(?<=[^\s\w])\s+|\s+(?=[^\w\s])//g'
    Rama 1*2.34*(L-0.45)XYZ 10 20.05 30.06 40 P>25.
    

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 2014-10-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多