Notepad ++正则表达式:匹配由标记

时间:2016-12-12 21:25:25

标签: regex notepad++

多年来,我在Notepad ++和SciTE中使用了一个非常方便的技巧,它允许我通过令牌分割给定的字符串。例如,给定此输入:

first name|last name
bob|johansen
scarlet|scarnetti
nelson|huguemeyer

然后我可以执行正则表达式将其转换为HTML表格。搜索字符串为:

(.+)|(.+)

替换字符串将是:

<tr><td>\1</td><td>\2</td></tr>

最终结果将是:

<tr><td>first name</td><td>last name</td></tr>
<tr><td>bob</td><td>johansen</td></tr>
<tr><td>scarlet</td><td>scarnetti</td></tr>
<tr><td>nelson</td><td>huguemeyer</td></tr>

当我的电子表格长达数百行并需要转换为HTML格式时,这非常有用!

不幸的是,在最近的版本中,似乎正则表达式引擎已经改变,使得上面的搜索模式不再有效。第一次出现的(.+)匹配从行的开头到行尾的所有内容,忽略了插入的|个字符。

我无助地通过各种不同的搜索模式肆无忌惮地试图找到一个能够获得第一个|的所有内容,然后是其后的所有内容。在较长的示例中,可能有五个或六个不同的段以|个字符分隔。

到目前为止,我的努力都失败了。如何通过Notepad ++中的正则表达式在特定标记处拆分输入行?

1 个答案:

答案 0 :(得分:2)

在当前的NPP版本中,|交替运算符。它必须在字符类之外转义以匹配文字管道符号。

您的^([^\|]+)\|([^\|]+)\|([^\|]+)$只会匹配3个|分隔字符串。

我想建议一个正则表达式来实现我second comment中的逻辑问题:

(^)|($)|\|

并替换为

(?{1}<tr><td>:?{2}</td></tr>:</td><td>)

搜索模式详情

  • (^) - 第1组:行首
  • | - 或
  • ($) - 第2组:行尾
  • | - 或
  • \| - 文字|

替换详情

  • (?{1} - 如果第1组匹配,
    • <tr><td> - 在第一行
    • 处替换(实际上,添加)<tr><td>
  • :?{2} - 否则,如果第2组匹配,
    • </td></tr> - 在第一行添加</td></tr>
  • : - 否则,|将替换为</td><td>
  • ) - 条件替换条款的结尾。

见截图:

enter image description here