2014-04-06 139 views
2

我有這樣的數據集:(約10,000次)正則表達式,記事本+ +替換/刪除幾個值

<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

還,其他所有數據已去,我想執行一個正則表達式的功能,將只是給我一個URLS列表。

我喜歡用記事本++做,但我吸吮在正則表達式,任何幫助將是welome

+0

感謝您接受答案。如果您有興趣,我添加了更先進的正則表達式,可以一步完成。 – acarlon

回答

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的末尾。

0

如果你只想要Id值,你可以這樣做:

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

然後你就可以獲取第一個捕獲的組\1這是Id文本值,然後從中創建一個鏈接。

這裏是一個演示:

http://regex101.com/r/jE9qN8

[更新]

要擺脫所有其他線路的,符合此正則表達式:'.*<Id>([^<]*)<\/Id>.*'和第一捕獲組\1更換。注意正則表達式匹配,因爲有多行,您需要激活DOTALL/s標誌以匹配換行符。

希望有所幫助。

+0

謝謝,但這只是讓我的ID,並允許我將它們添加到鏈接(這工作得很好btw!)。但是,我也想擺脫文件中的所有其他行(非ID數據) – user2015766

+0

@ user2015768,在這種情況下,我會更新我的答案。 – sshashank124

+0

@ user2015766。答案已更新。如果有幫助,你會介意接受嗎?謝謝。 – sshashank124