首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Notepad++正则表达式:匹配由令牌分隔的多个段

Notepad++正则表达式:匹配由令牌分隔的多个段
EN

Stack Overflow用户
提问于 2016-12-12 13:25:24
回答 1查看 1.7K关注 0票数 1

多年来,我在Notepad++和SciTE中使用了一个非常方便的技巧,它允许我用令牌将给定的字符串拆分。例如,考虑到这种输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
first name|last name
bob|johansen
scarlet|scarnetti
nelson|huguemeyer

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(.+)|(.+)

替换字符串为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<tr><td>\1</td><td>\2</td></tr>

最终结果将是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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++中的正则表达式拆分特定令牌上的输入行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 13:50:08

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(^)|($)|\|

而代之以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(?{1}<tr><td>:?{2}</td></tr>:</td><td>)

搜索模式详细信息

  • (^) -第1组:行的开始
  • | -或
  • ($) -第2组:行尾
  • | -或
  • \| -一个字面上的|

替换详细信息

  • (?{1} -如果第一组匹配,
    • <tr><td> --在行开始时替换(实际上是添加) <tr><td>

  • :?{2} -否则,如果第2组匹配,
    • </td></tr> -在行尾添加</td></tr>

  • : -否则,|</td><td>取代
  • ) -条件替换子句的结尾。

见截图:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41109849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文