我有这个数据集:(约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 ++来做,但我在正则表达式上很糟糕,任何帮助都会很好看
答案 0 :(得分:1)
为了保持正则表达式相对简单,你可以使用:
.*?<id>(.+?)</id>
替换为:
http://www.reviews.\1.domain.com\n
这将搜索并替换Id标记和前一文本的所有实例。然后,您可以手动删除最后一个。
确保选中matches newline
。
正则表达式是直截了当的,只是稍微有点棘手的部分是它使用非贪婪的+?
和*?
。这可以防止整个文件匹配。 ()
表示替换中使用的捕获组,即\1
。
如果您想要包含替换最后一部分的正则表达式,请使用:
.*?(?:(<id>)?(.+?)</id>).+?(?:<id>|\Z)
这有点棘手,它使用:
?:
。非捕获组。 |
或\Z
文件结尾基本上,第一次匹配所有内容直到第一个</id>
的结尾,并替换为包含下一个<id>
。之后它将替换起始<id>
,因此</id>
之前的所有内容都会进入组中。在最后一场比赛中,它将匹配文件\Z
的结尾。
答案 1 :(得分:0)
如果您只想要Id
值,则可以执行以下操作:
'<Id>([^<]*)<\/Id>'
然后,您可以获取第一个捕获的组\1
,它是Id文本值,然后从中创建一个链接。
这是一个演示:
[UPDATE]
要删除所有其他行,请匹配此正则表达式:'.*<Id>([^<]*)<\/Id>.*'
并替换为首先捕获的组\1
。请注意正则表达式匹配,因为有多行,您需要激活DOTALL
或/s
标记以匹配换行符。
希望有所帮助。