Regex 记事本++;用连字符替换数字之间的空格

Regex 记事本++;用连字符替换数字之间的空格,regex,notepad++,Regex,Notepad++,我有一个包含用于建筑计费的CSI代码的文件。它们的格式如下: 00 01 01 Project Title Page 00 01 05 Certifications Page 00 01 07 Seals Page 00 01 10 Table of Contents 00 01 15 List of Drawing Sheets 00 01 20 List of Schedules 00-01-01 Project Title Page 00-01-05 Certifications Pag

我有一个包含用于建筑计费的CSI代码的文件。它们的格式如下:

00 01 01 Project Title Page
00 01 05 Certifications Page
00 01 07 Seals Page
00 01 10 Table of Contents
00 01 15 List of Drawing Sheets
00 01 20 List of Schedules
00-01-01 Project Title Page
00-01-05 Certifications Page
00-01-07 Seals Page
00-01-10 Table of Contents
00-01-15 List of Drawing Sheets
00-01-20 List of Schedules
我们正在改变员工命名某些投标文件的方式,我需要使此列表具有以下格式:

00 01 01 Project Title Page
00 01 05 Certifications Page
00 01 07 Seals Page
00 01 10 Table of Contents
00 01 15 List of Drawing Sheets
00 01 20 List of Schedules
00-01-01 Project Title Page
00-01-05 Certifications Page
00-01-07 Seals Page
00-01-10 Table of Contents
00-01-15 List of Drawing Sheets
00-01-20 List of Schedules

我对regex非常陌生,我似乎无法让替换部分正常工作。要搜索文件,我使用非常简单的[0-9][0-9]。这突出了我感兴趣的每个部分。但是,无论使用什么替换条件,我都会使用连字符替换整个搜索语句。作为记录,我正在使用记事本+,并且我已经将它设置为使用正则表达式。我在其他具有类似标准的文章中尝试了许多替换字符串,但没有成功。谢谢你在这件事上花时间和考虑

您不需要任何捕获组

Regex:

(?<=\d) (?=\d)
-

您不需要任何捕获组

Regex:

(?<=\d) (?=\d)
-

搜索:
(\d)\s+(\d)

替换为:
$1-$2

  • (\d)
    将是数字,保存到捕获组中
  • \s+
    将是数字之间的任何空白
  • 在替换中,我们保留捕获组
    $1
    $2
    (数字),但在它们之间加一个连字符,而不是以前的空白
这将涵盖我在“用连字符替换数字之间的空格”中看到的任何情况

如果您只希望使用3个数字都用空格分隔的特定场景,则可以将搜索更改为
(\d+)\s+(\d+)\s+(\d+)(\d+)
,替换为
$1-$2-$3

如果您只需要常规空格而不需要制表符或其他任何内容,则可以用简单空格替换
\s

搜索:
(\d)\s+(\d)

替换为:
$1-$2

  • (\d)
    将是数字,保存到捕获组中
  • \s+
    将是数字之间的任何空白
  • 在替换中,我们保留捕获组
    $1
    $2
    (数字),但在它们之间加一个连字符,而不是以前的空白
这将涵盖我在“用连字符替换数字之间的空格”中看到的任何情况

如果您只希望使用3个数字都用空格分隔的特定场景,则可以将搜索更改为
(\d+)\s+(\d+)\s+(\d+)(\d+)
,替换为
$1-$2-$3

如果您只需要常规空格,而不需要制表符或其他任何内容,则可以用简单空格替换
\s

Notepad++内置功能 不需要使用正则表达式,您可以使用Notepad++的内置功能来实现这一点

您必须进入编辑->列模式:

查找/替换为正则表达式 如果您仍然想使用正则表达式。然后你可以这样做:

您可以搜索:
^(\d\d)\s(\d\d)\s

并替换为:
\1-\2-

Notepad++内置功能 不需要使用正则表达式,您可以使用Notepad++的内置功能来实现这一点

您必须进入编辑->列模式:

查找/替换为正则表达式 如果您仍然想使用正则表达式。然后你可以这样做:

您可以搜索:
^(\d\d)\s(\d\d)\s

并替换为:
\1-\2-

  • CTRL+F(在windows中)
  • 替换
  • 正则表达式☑
  • 搜索
    ^(\d+)(\d+)(\d+)
    ,替换
    \1-\2-\3

    • ^
      是行的开头(因此它不会意外地匹配文本中的任何内容)
    • ()
      正在捕获组的开始和结束
    • \d+
      是多个数字
    • 普通空格不需要任何特殊符号(如果它们是不同的空白字符,可以使用
      \s
      而不是
    • \1
      \2
      \3
      是捕获组的实际匹配项
    由于只有两个捕获组,您必须单击“全部替换”按钮两次,并从一开始就忽略
    ^

  • 全部替换
  • CTRL+F(在windows中)
  • 替换
  • 正则表达式☑
  • 搜索
    ^(\d+)(\d+)(\d+)
    ,替换
    \1-\2-\3

    • ^
      是行的开头(因此它不会意外地匹配文本中的任何内容)
    • ()
      正在捕获组的开始和结束
    • \d+
      是多个数字
    • 普通空格不需要任何特殊符号(如果它们是不同的空白字符,可以使用
      \s
      而不是
    • \1
      \2
      \3
      是捕获组的实际匹配项
    由于只有两个捕获组,您必须单击“全部替换”按钮两次,并从一开始就忽略
    ^

  • 全部替换

  • (?
    -\1-
    但这真的很难看:Dtitle
    用连字符替换数字之间的空格
    。所以这
    (?
    -\1-
    但这真的很难看:Dtitle
    用连字符替换数字之间的空格
    。所以这
    (?谢谢,我还发现使用转义将起作用。\1-\2.使用()的意义是什么?是什么告诉regex记住它找到的任何东西?例如,当我在搜索字段中使用([0-9])([0-9]),在替换字段中使用$1-$2或\1-\2时,它也起作用。@G.Oxsen,
    \d
    [0-9]
    将以相同的方式工作。而且在替换中,
    $1
    \1
    以相同的方式工作。regex中
    ()
    的意义在于