REGEX:在不丢失第二个标记内容的情况下,复制另一个标记中的标记内容

时间:2017-04-09 07:33:14

标签: regex windows notepad++

我有这两个标签,标题和元描述:

  

<title>My name</title>

     

<meta name="description" content="I love my beautiful princess"/>

我想将<meta name="description">标记的内容复制到<title>标记中,而不会丢失元标记的内容

所以我为此做了一个正则表达式:

搜索:<title>(.*?)</title>|<meta name="description" content="(.*?)"/>

替换为:<title>\2</title>

在这种情况下唯一的问题是,我正在丢失元标记的内容。

所以,我的愿望输出应该是:

  

<title>I love my beautiful princess</title>

     

<meta name="description" content="I love my beautiful princess"/>

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

<title>.*?<\/title>.*?(<meta.*?content="(.*?)"\/>)

并替换为:

<title>\2<\/title>\n\1

或者如果你想保留其余空间的其他内容......就是这样。无论如何,这两行之间有任何可能性......那么你可以这样做:

<title>.*?<\/title>(.*?)(<meta.*?content="(.*?)"\/>)

并替换为:

<title>\3<\/title>\1\2

Regex Demo

  

更新

根据op的评论:反之亦然,你可以这样做:

(<title>(.*?)<\/title>.*?)(<meta.*?content=").*?("\/>)

并替换为

\1\3\2\4

P.S:确保选中. matches newline

答案 1 :(得分:0)

如果您有类似的标签,例如:<title><h1>

。匹配换行符:

  

搜索:<title>.*?<\/title>(.*?)(<h1>(.*?)<\/h1>)

     

REPLACE BY:<title>\3<\/title>\1\2

反之亦然

。匹配换行符:

  

搜索:(<title>(.*?)<\/title>.*?)(<h1>).*?(<\/h1>)

     

REPLACE BY \1\3\2\4