2014-02-07 99 views
0

我從html源文件中提取了一個長下拉選項列表,並希望通過查找&來替換記事本++中的函數,但我努力將一個已知的固定文本RegEx中的字符串。正則表達式:在搜索中包含文本字符串

以下是HTML源的提取物給循環模式的想法,我有:

"icecream":{"cone":"30p","cup":"16p","double":"10p","waffle":"20p"}, 
"sorbet":{"cone":"10p","cup":"17p","double":"13p","waffle":"18p"}, 

我希望能結束這樣的(這樣我就可以將其導入到Excel中):

icecream,cone,30p,cup,16p,double,10p,waffle,20p 
sorbet,cone,10p,cup,17p,double,13p,waffle,18p 

這是我的嘗試:

查找:

"([a-z]*)":{"([cone])":"([0-9]*p)","([cup])":"([0-9]*p)","([double])":"([0-9]*p)","([waffle])":"([0-9]*p)"}, 

替換:\1,\2,\3,\4,\5,\6,\7,\8,\9

我發現一步總是返回「0 0文件點擊」我的猜測是那些已知固定的文本([錐],[杯]等)以正確的方式不編碼。也許我太天真地期待這個簡單的正則表達式能夠工作,但花了整整一天的時間閱讀教程,我只能開始理解人們的正則表達式是如何工作的,但仍然不能真正寫出功能性的正則表達式。

任何幫助非常感謝,並非常感謝你提前!

更新:

得到它與

「([AZ] *)」 的工作:{ 「(錐)」: 「([0-9] * P)」,「(杯) 「:」([0-9] * p)」, 「(雙)」: 「([0-9] * p)」, 「(華夫)」: 「([0-9] * p)」 },

現在我有一個第二個問題:有些價格是「£ 1」,而不是「[0-9] * p」,是有辦法,包括在這種情況下的「OR」命令?我試過

「([az] *)」:{「(cone)」:「([0-9] * p)|(£ 1)」,「(cup)」:「([ ([0-9] * p)|(£ 1)「,」(華夫餅乾)「:」([0-9] * p )|(£ 1)「},

但它不起作用。任何幫助非常感謝!

+0

試着把反斜槓在你的花括號和引號前面。他們是特殊字符。 –

+1

字符[]通常表示正則表達式中的字符類。所以你不是在尋找錐形單詞,而是爲了集合{'c','o','n','e'}中的一個字符。 –

+1

感謝瘋狂的物理學家和Simone-Cu!我添加了反斜槓並將文本括號替換爲(cone),這是我的第一個RegEx!現在我離完成整個任務還有一段距離,我已經更新了這個帖子以包含新的信息... – user3284375

回答

0

刪除圍繞字面單詞的字符集括號[]。如[cone]

這些是字面的單詞來匹配,而不是字符集。

您正則表達式改成這樣:

"([a-z]*)":{"(cone)":"([0-9]*p)","(cup)":"([0-9]*p)","(double)":"([0-9]*p)","(waffle)":"([0-9]*p)"}, 

工作正則表達式的例子:

http://regex101.com/r/kO3tU9

0
  1. 查找["{}]|,$,什麼也沒有更換。
  2. 查找:並替換爲,

最終結果:

icecream,cone,30p,cup,16p,double,10p,waffle,20p 
sorbet,cone,10p,cup,17p,double,13p,waffle,18p 
+0

非常感謝您的幫助!我已經將多個替換的宏放在一起,但是它太慢而無法在很多行上運行(整個下拉列表的html很大),所以儘管這樣做有效,但我希望打印較輕的代碼,因爲我打算這麼做定期更換這個大規模 – user3284375

+0

你的意思是你只想找到/替換一次?不幸的是,你必須製作一個極其緩慢且精確的RegEx來做到這一點。 – tenub

相關問題