获取正则表达式匹配的前n个字符

时间:2015-07-02 13:49:06

标签: regex notepad++

我想从这个正则表达式获得匹配的第一个n字符:

(\d+\s*)

基本上我想要用空格填充。所以在行中:

12345␢␢␢␢␢␢␢␢123␢␢␢␢␢␢␢
123␢␢␢␢␢␢␢␢␢12345␢␢␢␢␢␢

我想完成:

12345␢␢␢␢␢123␢␢␢␢␢␢␢
123␢␢␢␢␢␢␢12345␢␢␢␢␢

一条线上总有两个匹配,并且这些线的长度是恒定的。

2 个答案:

答案 0 :(得分:2)

多次通过

根据有关问题及其结构的额外信息,我建议采取以下步骤:

  1. 将每一行分成两行,就在第二种模式之前。
  2. 从每一行抓取所需的部分。
  3. 重新组合行,以便匹配在原始行上。
  4. 这意味着:

    1. ^(\d*\s*)(\d*\s*)$替换为$1\r\n$2。如果您不在Windows上,请放弃\r,我怀疑。您应该考虑在一行末尾添加一个宏。这应该是未包含在文档其余部分中的内容(例如#)。 $1表示替换第一个捕获的组(括号内的内容)。因此请将其替换为$1#\r\n$2
    2. 现在抓住每行所需的长度:(^.{n}).*(#?)并替换为$1$2。这将捕获第一个n符号,并在找到宏时插入宏。
    3. 删除宏后的换行符:#\r\n。请删除这些内容或将其替换为\0
    4. 备注

      • 您必须首先过滤与(^\d*\s*)匹配的行。
      • 如果您想要另一个宏,请在答案上方添加#的出现次数。它不应该包含在文件的其余部分中,至少不能包含在一行的末尾。
      • 此答案使用反向引用,应该是no problem

      单程

      这里也可能单次通过。

      ^(\d[\d\s]{n-1})[^\d]*(\d[\d\s]{n-1}).*$
      

      匹配这些行,如果您提取第一组和第二组,这将过滤文件中所需的输出。只需将其替换为$1$2

答案 1 :(得分:1)

替换:

(\d[\d\s]{n-1})\s*

使用:

$1

这将替换一个数字,后跟n-1个数字或空白字符,后跟任意数量的空白字符,匹配的内容的第一个n字符(因此每行应获得2个匹配)。