RegEx,Notepad ++替换/删除多个值

时间:2014-04-06 04:18:11

标签: regex

我有这个数据集:(约10k次)

<Id>HOW2SING</Id>
<PopularityRank>1</PopularityRank>
<Title><![CDATA[Superior Singing Method - Online Singing Course]]></Title>
<Description><![CDATA[High Quality Vocal Improvement Product With High Conversions.     Online Singing Lessons Course Converts Like Crazy Using Content Packed Sales Video. You Make 75% On Every Sale Including Front End, Recurring, And 1-click Upsells!]]></Description>
<HasRecurringProducts>true</HasRecurringProducts>
<Gravity>45.9395</Gravity>
<PercentPerSale>74.0</PercentPerSale>
<PercentPerRebill>20.0</PercentPerRebill>
<AverageEarningsPerSale>74.9006</AverageEarningsPerSale>
<InitialEarningsPerSale>70.1943</InitialEarningsPerSale>
<TotalRebillAmt>16.1971</TotalRebillAmt>
<Referred>75.0</Referred>
<Commission>75</Commission>
<ActivateDate>2011-06-23</ActivateDate>
</Site>

我正在尝试执行以下操作:

从标记中获取数据,并使用它来创建URL,因此在此示例中应该生成

http://www.reviews.how2sing.domain.com

此外,所有其他数据都必须去,我想执行一个REGEX功能,它只会给我一个URLS列表。

我更喜欢用notepad ++来做,但我在正则表达式上很糟糕,任何帮助都会很好看

2 个答案:

答案 0 :(得分:1)

为了保持正则表达式相对简单,你可以使用:

.*?<id>(.+?)</id>

替换为:

http://www.reviews.\1.domain.com\n

这将搜索并替换Id标记和前一文本的所有实例。然后,您可以手动删除最后一个。

enter image description here

确保选中matches newline

正则表达式是直截了当的,只是稍微有点棘手的部分是它使用非贪婪的+?*?。这可以防止整个文件匹配。 ()表示替换中使用的捕获组,即\1

如果您想要包含替换最后一部分的正则表达式,请使用:

.*?(?:(<id>)?(.+?)</id>).+?(?:<id>|\Z)

这有点棘手,它使用:

  • ?:。非捕获组。
  • |
  • \Z文件结尾

基本上,第一次匹配所有内容直到第一个</id>的结尾,并替换为包含下一个<id>。之后它将替换起始<id>,因此</id>之前的所有内容都会进入组中。在最后一场比赛中,它将匹配文件\Z的结尾。

答案 1 :(得分:0)

如果您只想要Id值,则可以执行以下操作:

'<Id>([^<]*)<\/Id>'

然后,您可以获取第一个捕获的组\1,它是Id文本值,然后从中创建一个链接。

这是一个演示:

http://regex101.com/r/jE9qN8

[UPDATE]

要删除所有其他行,请匹配此正则表达式:'.*<Id>([^<]*)<\/Id>.*'并替换为首先捕获的组\1。请注意正则表达式匹配,因为有多行,您需要激活DOTALL/s标记以匹配换行符。

希望有所帮助。