【问题标题】:Using Notepad++ regex, match all spaces between specific characters使用 Notepad++ 正则表达式,匹配特定字符之间的所有空格
【发布时间】:2019-09-21 18:26:43
【问题描述】:

我正在尝试清理一些汇编代码,并且我想将指令和参数之间的空格转换为制表符。但是,我想避免无意中转换分号后 cmets 中单词之间的空格。

下面是一些代码行的示例:

label:          bcf INTCON,2                ; comment comment and more comment.
                btfss PORTA,2

我最接近的是(?<=^).+(?=;)。这不仅匹配行首和分号之间的所有内容,而且包括除了最后一个分号之外的所有分号。想象一下带有被注释掉的 cmets 的代码行。也不考虑没有cmets的行。

我该怎么做?

【问题讨论】:

  • 感谢您的编辑!我正试图让代码部分看起来正确,你打败了我。 :) 基本上将 bcf INTCON,2 之间的空格更改为两个制表符,并对所有代码行执行此操作。
  • 预期结果是什么?
  • 恐怕这些答案都不能解决这个问题。让我们这样看:匹配并突出显示该行的第一个空格,仅此而已。我的意思是 space 就像在 \0x20 中一样,而不是空格(制表符等)。行首和第一个分号之间只有 1 个空格字符。我想避免包括第一个分号之后的所有内容。
  • 那么这些是指令之前和操作数之后的制表符,而不是空格?
  • ;.*(*SKIP)(*F)|\b \b这样简单的东西怎么样

标签: regex notepad++


【解决方案1】:

也许,

^([^:\r\n]+:)\s*([^\r\n]+?)(?:$|\s{2,})(;.*)?$

和替换,

$1      $2      $3

开始可能没问题。

Demo


如果您希望简化/修改/探索表达式,在regex101.com 的右上角面板中已对此进行了说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入匹配。


【讨论】:

    【解决方案2】:
    • Ctrl+H
    • 查找内容:^(\w+:)\h+|^\h+
    • 替换为:(?1$1\t:\t\t)
    • 检查环绕
    • 检查正则表达式
    • 全部替换

    说明:

    ^           # beginning of line
      (\w+:)    # group 1, 1 or more word characters followed by colon
      \h+       # 1 or more horizontal spaces
     |          # OR
    ^           # beginning of line
      \h+       # 1 or more horizontal spaces
    

    替换:

    (?1         # if group 1 exists, then
      $1\t      #  content of group 1 and a tab
     :          # else
      \t\t      #  2 tabs
    )           # end conditional replace
    

    屏幕截图:

    【讨论】:

      【解决方案3】:

      如果您想将 bcf 和 INTCON,2 之间的空格更改为 2 个制表符,您可以匹配 2 个“单词”并确保它们不以 ; 开头

      ^(?:\S+:)?\h+(?!;)\S+\K\h+(?=[^\s;])
      
      • ^ 字符串开始
      • (?:\S+:)? 可选匹配 1+ 个非空白字符和 :
      • \h+(?!;) 匹配 1+ 个水平空白字符,然后断言右边的不是 ;
      • \S+\K 匹配 1+ 个非空白字符,忘记匹配的内容
      • \h+ 匹配 1+ 个水平空白字符(此匹配将被替换)
      • (?=[^\s;]) 断言右边的不是空格字符或;

      在替换中使用 2 个标签 \t\t

      Regex demo

      编辑

      如果你想找到非空白字符之间的第一个空格,你可以使用

      ^.*?\S\K (?=\S)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 2019-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多