所以我需要获取一个字符串的一部分,其中包含:name =
字符串如下所示: [Zone] ZoneChangeList.ProcessChanges() - id = 1 local = False [name = XXX id = 4 zone = PLAY zonePos = 0 cardId = HERO_01 player = 1] zone from - >友好的游戏(英雄)
XXX可以是任何长度,包括空格,除此之外的所有内容都应该替换为空。
任何想法??
问候!
答案 0 :(得分:2)
如果您完全确定在id
之后name
会立即出现,您可以使用这样的RegEx模式:
\[name=(?<NameGroup>(.*))\s*id
当您进行匹配时,NameGroup
将包含名称(在本例中为xxx)。然后,您可以使用此模式执行Regex.Replace()以将名称替换为其他名称。您可能需要根据需要使用模式,以确保它捕获所有极端情况。
答案 1 :(得分:1)
使用String.IndexOf
查找“name =”标记的索引和“id =”标记的索引,然后查找这些索引之间的子串。您必须考虑标签的长度,但这应该不是问题,因为这些标签的长度是已知的
string s = "[Zone] ZoneChangeList.ProcessChanges() - id=1 local=False [name=XXX id=4 zone=PLAY zonePos=0 cardId=HERO_01 player=1] zone from -> FRIENDLY PLAY (Hero)"
int x = s.IndexOf("[name=") + "name=".Length;
int y = s.IndexOf(" id=");
s.Substring(x,y);
答案 2 :(得分:1)
string tag = "[name=";
string name = str.Split(' ').Single(x => string.Concat(x.Take(tag.Length)) == tag).Remove(0, tag.Length);
假设数据始终以空格分隔,获取以正确标记开头的元素(假设这是唯一的),然后修剪标记并返回名称数据。