【问题标题】:Swap text around a character在字符周围交换文本
【发布时间】:2016-09-06 14:50:13
【问题描述】:

我有几行格式相同的文本:

Title1 : Text1 Title2 : Text2

如何将: 两边的文字交换到另一边?喜欢:

Text1 : Title1 Text2 : Title2

我可以编写一个小脚本来执行此操作,但我想知道是否有更快的方法来使用 Regex、内置功能或任何其他魔法来执行此操作?

【问题讨论】:

  • 是否有前导/尾随空格需要处理?如果是,请使用 ^(\h*\w+)(\h*:\h*)(\w+\h*)$ -> $3$2$1 正则表达式替换。
  • @WiktorStribiżew,找不到任何文本。让我给你更多关于线条的细节。它们都是这种格式:Homepage (homepage): http://www.example.com/
  • 啊哈,那是一壶不同的鱼。使用^([^\r\n:]+)(:\h*)(.*)$ 并使用相同的替换。或^([^\r\n:]+)(:\h*)([^:\r\n]+)$
  • 哇,成功了!!。你能解释一下$3$2$1 部分吗?
  • @WiktorStribiżew,请将其写为答案,以便我接受。

标签: notepad++ text-editor


【解决方案1】:

你可以使用

^([^\r\n:]+)(:\h*)(.*)$

^([^\r\n:]+)(:\h*)([^:\r\n]+)$

替换为$3$2$1,其中$n 是对使用捕获组捕获的值的反向引用。这些组会按照它们在模式中出现的顺序自动编号。

详情

  • ^ - 行首
  • ([^\r\n:]+) - 组 1 稍后称为 $1 捕获除 CR、LF 和冒号之外的一个或多个字符
  • (:\h*) - 第 2 组捕获一个冒号和零个或多个水平空格
  • ([^:\r\n]+) -Group 3 稍后称为 $3。见上文。
  • $ - 行尾。

【讨论】:

    【解决方案2】:

    第 1 步:按住键盘上的 Alt 按钮并突出显示第 3 列,即 Text1。这将选择整个 3 列。

    第 2 步:右键单击并选择“剪切”,然后粘贴到第一列的前面。

    第 3 步:按住键盘上的 Alt 按钮并突出显示“:”列。

    第 4 步:右键单击并选择“剪切”,然后粘贴到第 1 列和第 2 列之间。

    【讨论】:

    • 没有列。这些是成行的文本。
    • 如果没有列,它应该仍然可以工作。您是否尝试过按住 alt 按钮并突出显示 ':' 后面的文本?
    • 我知道你想做什么。这些线的长度不同,所以我不能这样选择。
    猜你喜欢
    • 2010-11-25
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多