正则表达式将整个复制到下一行

时间:2017-08-22 15:59:41

标签: regex

过去一小时我一直在努力,而且无法找到解决方案。

我在xml文件中有这些标记

<products>  
<product>
    <product_id>1472456</product_id>
    <model>BSTWH2R</model>
    <image><![CDATA[http://www.specsserver.com/CACHE/FRGGRNGOCAFM.JPG]]></image>
    <price>100.0000</price>
    <category></category>
    <brand>Lumisource</brand>
    <title>H2 Bar Stool - Red</title>
    <productpageurl><![CDATA[http://www.appliance.com/index.php?route=product/product&modelnumber=BSTWH2R&path=1&product_id=1472456]]></productpageurl>
</product>

<product>
    <product_id>1472457</product_id>
    <model>BSTWH2W</model>
    <image><![CDATA[http://www.specsserver.com/CACHE/FREVSCQLWITW.JPG]]></image>
    <price>100.0000</price>
    <category></category>
    <brand>Lumisource</brand>
    <title>H2 Bar Stool - White</title>
    <productpageurl><![CDATA[http://www.appliance.com/index.php?route=product/product&modelnumber=BSTWH2W&path=1&product_id=1472457]]></productpageurl>
</product>

我希望将其更改为以下代码,只在下一行中再次复制品牌标签并在其后有一个空格

<products>  
<product>
    <product_id>1472456</product_id>
    <model>BSTWH2R</model>
    <image><![CDATA[http://www.specsserver.com/CACHE/FRGGRNGOCAFM.JPG]]></image>
    <price>100.0000</price>
    <category></category>
    <brand>Lumisource</brand>
    <brand>Lumisource </brand>
    <title>H2 Bar Stool - Red</title>
    <productpageurl><![CDATA[http://www.appliance.com/index.php?route=product/product&modelnumber=BSTWH2R&path=1&product_id=1472456]]></productpageurl>
</product>

<product>
    <product_id>1472457</product_id>
    <model>BSTWH2W</model>
    <image><![CDATA[http://www.specsserver.com/CACHE/FREVSCQLWITW.JPG]]></image>
    <price>100.0000</price>
    <category></category>
    <brand>Lumisource</brand>
    <brand>Lumisource </brand>
    <title>H2 Bar Stool - White</title>
    <productpageurl><![CDATA[http://www.appliance.com/index.php?route=product/product&modelnumber=BSTWH2W&path=1&product_id=1472457]]></productpageurl>
</product>

3 个答案:

答案 0 :(得分:0)

编辑:

使用此模式(<brand>)([^<]+)(<\/brand>) Demo

(           # Capturing Group (1)
  <brand>   # "<brand>"
)           # End of Capturing Group (1)
(           # Capturing Group (2)
  [^<]      # Character not in [<] Character Class
  +         # (one or more)(greedy)
)           # End of Capturing Group (2)
(           # Capturing Group (3)
  <         # "<"
  \/        # "/"
  brand>    # "brand>"
)           # End of Capturing Group (3)

答案 1 :(得分:0)

我会做以下事情:

(<brand>([^<]+)</brand>)

替换为:

\1\n<brand>\2 </brand>

因为您只想使用品牌标签。这将复制整行,然后将为您提供一个新行,其中包含“品牌”中的内容(一切都达到下一个非'小于'),并添加一个空格。祝你好运!

答案 2 :(得分:0)

以下正则表达式保留缩进以及换行符的类型:

(([ \t]*<brand>[^<]*)([^\r\n]+[\r\n]+))

使用此作为替换字符串:

\1\2 \3

在行动here at regex101中查看。

可视化。 (单击图像进行交互式演示):

Debuggex Visualization Demo

相关问题