2016-06-22 114 views
2

我想用正則表達式匹配以下兩個String對象。我正在分組並從第一個String中提取值3.00,4.00,100.00;它工作正常。但是,我有很多String對象,並且都不包含第三組,因此我想將該組作爲可選項。因此我爲該組添加了一個?以使其成爲可選項。然而,這並沒有什麼不同,並且沒有第三組部分的任何String都與我的正則表達式不匹配。匹配字符串和可選數據

我如何使第三組可選?有沒有關於我的正則表達式是否可以更好地格式化的建議?謝謝!

正則表達式

cost{"([0-9]+\.[0-9]+)[0-9"{]},+[a-zA-Z0-9]+{"+([0-9]+\.[0-9]+)[0-9A-Za-z"},{[\]\._-]+:price{"([0-9]+\.[0-9]+)? 

字符串1相匹配,因爲它具有第三組值

cost{"3.00{},asdjdfhjkf23hawoutcome{"4.00"},79234gh3k2bdfsfgs2323g23jkg23{[]._-,bonus:price{"100.00"}jksdfjksdf222sdcfszfSDAWFD; 

字符串2不匹配,因爲它不具有第三組值

cost{"5.00{},asdjdfhjkf23hawoutcome{"36.00"},79234gh3k2bdfsfgs2323g23jkg23{[]._-,jksdfjksdf222sdcfszfSDAWFD; 
+0

@WiktorStribiżew字符串與圖中字符串的變化完全相同,可能有也可能沒有第3組。文件大小明智的是它超過1TB(如果有的話)。 – JasSy

+1

請參閱https://regex101.com/r/cY3oH8/1。 POI是'(?:: price {「([0-9] + \。[0-9] +))?',這個非捕獲組是完全可選的。 –

+0

什麼是」組3「 ? –

回答

0

您必須將第3組的全部包含在圓括號中才能完成此項工作。我不知道你的意思到底是什麼,但只是去對它們包含的內容,這是你的正則表達式應該是什麼樣子:

cost{"([0-9]+\.[0-9]+)[0-9"{]},+[a-zA-Z0-9]+{"+([0-9]+\.[0-9]+)[0-9A-Za-z"},{[\]\._-]+(:price{"([0-9]+\.[0-9]+))? 

通知的()周圍的最後一位 - 這是什麼使得正則表達式對待整個事情作爲一個單位。否則,它只是看最後一個邏輯塊,看到最後的(),而不是你想要忽略的所有部分。