-3
我有一個這樣的字符串 -劈裂串多個條件
query = "UserId:(\"787D01FE-D108-4C83-A2E2-4B1DA3166A5C\" OR \"CCA47A4F-B4FA-405C-B34E-EC2E0B1F374C\") AND CreatedDate:[2017-06-20T06:14:11Z TO 2017-07-20T06:14:11Z] OR FirstName: Abc ";
但我想要得到的結果陣列這樣的 -
queries=
{
[0] UserId:(\"787D01FE-D108-4C83-A2E2-4B1DA3166A5C\" OR \"CCA47A4F-B4FA-405C-B34E-EC2E0B1F374C\")
[1] AND
[2] CreatedDate:[2017-06-20T06:14:11Z TO 2017-07-20T06:14:11Z]
[3] OR
[4] FirstName: Abc
}
更新:
所以遠遠我用過 -
var result =
(from Match m in Regex.Matches(query , @"\[[^]]*]|\{[^}]*}|[^:]+")
select m.Value)
.ToArray();
但與此結束 -
SOLUTION:
基於由@NetMage建議的解決方案,我增加了一些變化,以照顧雙引號的,條件在括號內Here
UserId : ("787D01FE-D108-4C83-A2E2-4B1DA3166A5C" OR "CCA47A4F-B4FA-405C-B34E-EC2E0B1F374C") AND CreatedDate : [ 2017-06-20T06:14:11Z TO 2017-07-20T06:14:11Z ] AND (FirstName : "Abc" OR LastName : "Xyz")
正則表達式 -
(?:\w+?\s*:\s*(\(.+?\)|\".+?\"|\[.+?\]|\w+))|(?:\(\w+?\s*:\s*(\(.+?\)|\".*?\"*|\[.+?\]|\w+)\))|([A-Z]+([A-Z]+)?)
看看string.Split:https://msdn.microsoft.com/en-us/library/1bwe3zdy(v=vs.110).aspx – Neil
我已經通過這個走了,但不能找到了解決方案。最好提出答案 –
你試過了什麼?最好修復你的非工作代碼,而不是提供你已經嘗試過的東西。 – Neil