我想使用RegEx將字符串拆分爲多個對象。每個記錄由a分隔,每個字段由〜分開。使用正則表達式的多模式匹配
所以樣本數據會看起來像:
:1~Name1:2~Name2:3~Name3
正則表達式我至今是
:(?<id>\d+)~(?<name>.+)
然而,這隻會匹配的第一條記錄的時候,確實我希望3.如何我得到的RegEx返回所有比賽,而不僅僅是第一次?
我想使用RegEx將字符串拆分爲多個對象。每個記錄由a分隔,每個字段由〜分開。使用正則表達式的多模式匹配
所以樣本數據會看起來像:
:1~Name1:2~Name2:3~Name3
正則表達式我至今是
:(?<id>\d+)~(?<name>.+)
然而,這隻會匹配的第一條記錄的時候,確實我希望3.如何我得到的RegEx返回所有比賽,而不僅僅是第一次?
你最後的.+
是貪婪的,所以它吞噬了Name1
以及其他的字符串。
嘗試
:(?<id>\d+)~(?<name>[^:]+)
這意味着該名稱不能在它:
(這可能是爲您的數據確定),並確保該名稱不搶入下一場。
(也可以使用Regex.Matches方法抓取所有匹配,而不僅僅是第一個)。
用途:
var result = Regex.Matches(input, @":(?<id>\d+)~(?<name>[^:]+)").Cast<Match>()
.Select(m => new
{
Id = m.Groups["id"].Value,
Name = m.Groups["name"].Value
});
您更好地使用字符串.split()
方法。
String[] records = myString.split(':');
for(String rec : records)
{
String[] fields = rec.split('~');
//use fields
}