【问题标题】:Get first n characters of a regex match获取正则表达式匹配的前 n 个字符
【发布时间】:2015-09-20 02:14:12
【问题描述】:

我想从此正则表达式中获取匹配的第一个 n 字符:

(\d+\s*)

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

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

我想结束:

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

一行总是有两个匹配项,并且这些行的长度是恒定的。

【问题讨论】:

  • 使用.{n} 进行第二次匹配?不确定记事本(从未使用过),但在grep 中,您只需使用grep -o .\{n\} 再次匹配即可获得所需的结果。
  • 你想用你的正则表达式表达什么?为什么像 ^.{n} 这样的东西还不够?
  • @bro 好。它适用于第一列。第二个呢?检查更新的问题
  • 您想在 notepad++ 中的单个搜索替换中执行此操作吗?只是根据您的标签询问。
  • @nikh 不一定是单程

标签: regex notepad++


【解决方案1】:

多次传球

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

  1. 在第二个模式之前将每一行一分为二。
  2. 从每一行中获取所需的部分。
  3. 重新组合这些行,使匹配项位于其原始行上。

意思是这样的:

  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

备注

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

单程

这里也可以单次通过。

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

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

【讨论】:

    【解决方案2】:

    替换:

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

    与:

    $1
    

    这将替换一个数字,后跟 n-1 数字或空白字符,然后是任意数量的空白字符,然后是匹配的第一个 n 字符(因此每行应该有 2 个匹配项)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      相关资源
      最近更新 更多