【问题标题】:Regular expression to add a word between html-tags (newbie)正则表达式在 html-tags 之间添加一个单词(新手)
【发布时间】:2013-08-07 11:29:27
【问题描述】:

我似乎无法创建适用于这种情况的正则表达式:

我有数百行看起来像这样:

<a title="Match" href="http://mywebsite.com/category/Match"></a>

我需要在 html 标签之间插入标题词,如下所示:

<a title="Match" href="http://mywebsite.com/category/Match">Match</a>

这是我的微弱尝试(使用 Notepad++):

Find:
 title="([A-Za-z][A-Za-z0-9]*?)"([A-Za-z][A-Za-z0-9]*?)><

Replace:
 title="\1"\2>\1<

如你所见,我真的很讨厌正则表达式:D

任何帮助将不胜感激!

编辑:

我应该澄清一下,这是在 Notepad++ 中使用查找和替换面板执行的一次性操作。

我还应该澄清一下,“匹配”这个词在每一行都会有所不同。

【问题讨论】:

  • @zespri Notepad++ 中没有 XML/HTML 解析器。不错的尝试。
  • @AbsoluteƵERØ:这让我想起了最近和我儿子的一次对话。 “爸爸,我的安全带不能系上!那是因为你是一只手做的。用你的两只手。但我一只手拿着这个玩具!那你必须把玩具放下,用你的双手扣上,然后拿起玩具”。
  • @zespri 更像是“儿子,系好安全带!”他的回答是“爸爸!?我在骑自行车!”

标签: html regex notepad++


【解决方案1】:

这适用于 Notepad++ 6.3.2

查找内容:

(title\=")([^"]+)("[^>]+>)(<)

替换为:

\1\2\3\2\4

【讨论】:

    【解决方案2】:

    使用捕获组和反向引用

    您可以使用捕获组捕获部分匹配项,然后将它们替换为反向引用。具体语法可能因语言和实现而异。这里有两个例子。

    Ruby 示例

    str = %q{<a title="Match" href="http://mywebsite.com/category/Match"></a>}
    str.sub /(Match)(">)</, "#{$1}#{$2}#{$1}<"
    # => "<a title=\"Match\" href=\"http://mywebsite.com/category/Match\">Match</a>"
    

    GNU sed 示例

    $ echo '<a title="Match" href="http://mywebsite.com/category/Match"></a>' |
        sed -r 's/(Match)(">)</\1\2\1</'
    <a title="Match" href="http://mywebsite.com/category/Match">Match</a>
    

    【讨论】:

    • Notepad++ 在 Windows 中。
    • @AbsoluteƵERØ Cygwin 也是如此。 Windows 不是不使用 Ruby 或 GNU sed 的借口。
    • 我知道,我运行各种操作系统,但我不是普通的计算机用户。 :) 只是想而不必说“安装一堆其他东西,因为我不知道你的程序,然后选择我的解决方案。”在 OP 选择的应用程序中提供解决方案更容易。
    • 任何有兴趣的人都可以从这里获得适用于 Windows 的 sed:gnuwin32.sourceforge.net/packages/sed.htm
    猜你喜欢
    • 2018-12-03
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多