2016-09-21 45 views
0

我有一堆產品代碼,我試圖解析(例99項目SEC銷售)。在極少數情況下,產品代碼就像99 ITEM SEC SALE。有條件的正則表達式解析

如果它的單元格是「99 ITEM SEC SALE」,那麼「ITEM SEC」將被解析(取出99並出售)。 如果單元格是「99 ITEM SEC」(否 - >銷售,出售或購買)。我希望ITEM SEC也能被解析。換句話說,「出售和購買」是禁止的詞語。

1-它總是一組數字的開始(無限制) 2-字母字符(任何) 3-字母字符(任何) - 可選 4-如果結束值(字符串)不是「SALE 「或」SOLD「或」PURCHASED「,然後取出數字並解析

我發現了類似的東西,但無法弄清楚它應該如何爲我的情況工作。

感謝您的幫助

回答

0

好的,所以你的工作是這樣的。

(?P<number>\d+)\s+(?P<Item_Name>\w+)\s+(?P<code>[a-zA-Z]{0,3})\s+(?P<status>SOLD|SALE|PURCHASED)? 

(?P<number>\d+) -- Named Capture Group 1 (number)- Match any number 
\s+ -- Match any number of spaces 
(?P<Item_Name>\w+) -- Named Capture Group 2 (Item_Name) - Match any word until space 
\s+ match any number of spaces 
(?P<code>[a-zA-Z]{0,3}) -- Named Capture Group 3 (code) - Match any a-zA-Z character 0-3 times 
\s+ match any number of spaces 
(?P<status>SOLD|SALE|PURCHASED)? -- Named Capture Group 4 (status) - Match SOLD/SALE/PURCHASED (? means 0 or 1 times so this is optional) 

活生生的例子:https://regex101.com/r/oR3sK8/1

如果命名捕獲組這樣的工作進行客觀-C我不記得,如果他們不這樣做,你可以刪除在P < ...>和正則表達式應該仍然沒有問題(並且保持你的捕獲組基本不變)。