【发布时间】:2016-12-13 05:50:08
【问题描述】:
多年来,我在 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++ 中的正则表达式在特定标记处拆分一行输入?
【问题讨论】:
-
有没有用过?我认为你需要
(.+)\|(.+)。如果你需要first|,你的模式根本不起作用,你需要(.*?)\|(.*)。 在较长的示例中,可能有五个或六个不同的句段,用 | 分隔。字符。 - 那你想要什么? -
我突然想到你想用
</td><td>(不需要正则表达式)替换所有|,然后2)^正则表达式用<tr><td>和3)$用@987654337 @。不过,这可以打包到 1 个正则表达式替换中。 -
是的,多年来一直运行良好。但我最近升级到了新版本——从 2007 年到最近,我一直在使用 SciTE 版本,看起来最近的 Notepad++ 有很多不同之处。例如,
|在我的旧版本中 不是 正则表达式重要字符。当我习惯于单行时,它现在似乎默认在多行上运行。根据您的第二条评论,我在一个包含三个部分的示例上尝试了^([^\|]+)\|([^\|]+)\|([^\|]+)$,这就是我想要的。将其归档为答案,我会接受。 -
你可能需要投资更专业的 IDE
-
另外,如果您只想匹配 1 行,则需要将
\r和\n添加到否定字符类中:^([^|\r\n]+)\|([^|\r\n]+)\|([^|\r\n]+)$