在 Notepad++ 中多次运行搜索替换

在 Notepad++ 中多次运行搜索替换

我有一个文本文件,其中有一些制表符格式的表格,例如

Num     Name    val1    val2
1       Str     bar     baz
2       Dex     foo     bar
3       Con     foo     foo

(显然有些人没有读过我的描述,因此感到困惑,所以要澄清一下:这并不代表真实数据。数据是假的,只有格式是真实的。除了数据不包含\t字符之外,不要对数据做任何假设。)

我想将其转换为 wiki 的语法,其中表格如下所示

{| border=1 cellspacing=0 cellpadding=4 align=left
|- valign=top
! Num !! Name !! val1 !! val2
|-
| 1 || Str || bar || baz
|-
| 2 || Dex || foo || bar
|-
| 3 || Con || foo || foo
|-
|}

我有一组正则表达式搜索/替换来完成大部分工作,但使用 !! 的顶行很不正常。我让标题在第一行的开头添加一个 !,然后使用正则表达式

/![\t ]+([a-zA-Z0-9]+)/

将其替换为

!! \1 !

并应用于所有行。最终,这种方法可行,但目前每行只能工作一次,我需要进行多达十几次。我希望减少所需的点击次数,因为我预计会重复进行此转换。

我非常确定“真正的”正则表达式无法做到这一点,因为它涉及未知数量的捕获组,这些捕获组必须保持不变,因此我期望解决方案将利用 Notepad++ 的其他功能。如果我错了,并且可以使用正则表达式引擎的通用扩展来实现这一点,那也很好。

答案1

这将一次性转换所有数据行。

  • Ctrl+H
  • 找什么:(?:(^\d+|\G)\h+(\S+))(\R)?
  • 用。。。来代替:| $1 || $2(?3$3|-$3)
  • 查看 环绕
  • 查看 正则表达式
  • Replace all

解释:

(?:             # non capture group
    (           # group 1
        ^\d+    # 1 or more digit at begiinning of line
      |       # OR
        \G      # restart from last match position
    )           # end group 1
    \h+         # 1 or more horizontal spaces
    (\S+)       # group 2, 1 or more non spaces
)               # end group
(\R)?           # group 3, any kind of linebreak, optional

替代品:

| $1 || $2      # pipe space content of group1 space double pipe space content of group 2
(?3         # conditional replacement, if group 3 exists:
    $3          # content of group 3
    |-          # pipe hyphen
    $3          # content of group 3
)           # end condition

屏幕截图:

在此处输入图片描述


然后,您可以手动转换标题

相关内容