多年来,我在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++中的正则表达式拆分特定令牌上的输入行?
发布于 2016-12-12 13:50:08
在目前的NPP版本中,|
是一个交替运算符。它必须在字符类之外转义,以匹配文字管道符号。
您的^([^\|]+)\|([^\|]+)\|([^\|]+)$
将只匹配3部分|
分隔字符串。
我想建议一个正则表达式来实现我的second comment中的逻辑来解决这个问题:
(^)|($)|\|
而代之以
(?{1}<tr><td>:?{2}</td></tr>:</td><td>)
搜索模式详细信息
(^)
-第1组:行的开始|
-或($)
-第2组:行尾|
-或\|
-一个字面上的|
。替换详细信息
(?{1}
-如果第一组匹配,<tr><td>
--在行开始时替换(实际上是添加) <tr><td>
:?{2}
-否则,如果第2组匹配,</td></tr>
-在行尾添加</td></tr>
:
-否则,|
被</td><td>
取代)
-条件替换子句的结尾。见截图:
https://stackoverflow.com/questions/41109849
复制相似问题