字符串分割的有效方法
我有一个像这样的完整字符串
N:Pay in Cash++RGI:40++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:~~ N:ERedemption++RGI:42++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:
这个字符串是这样的
- 它是由 ~~ 分隔的 PO(付款选项)列表
- 该列表可能包含一个或多个 OP
- PO 仅包含分隔的键值对by :
- 空格由 ++ 表示
我需要提取键“RGI”和“N”的值。
我可以通过 for 循环来做到这一点,我想要一种有效的方法来做到这一点。 对此有任何帮助。
编辑:从~~到~~
I have a completed string like this
N:Pay in Cash++RGI:40++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:~~ N:ERedemption++RGI:42++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:
this string is like this
- It's list of PO's(Payment Options) which are separated by ~~
- this list may contains one or more OP
- PO contains only Key-Value Pairs which separated by :
- spaces are denoted by ++
I need to extract the values for Key "RGI" and "N".
I can do it via for loop , I want a efficient way to do this.
any help on this.
Edit: from ~ ~ To ~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在“:”上使用
string.Split()
来提取键值对。然后根据需要提取它们。如果字符串中的位置不固定,则需要在生成的
string[]
数组中的每个项目中搜索特定键。如果您需要经常搜索,我会考虑拆分键值对并放入某种字典中。
Use
string.Split()
on ":" to extract the key-value pairs.Then extract as you need them. If the positions in the string are not fixed,you will need to search each item in the resulting
string[]
array for a particular key.If you need to search often, I would consider splitting the key-value pairs and placing in some sort of Dictionary.
这是基于索引进行搜索的尝试:(我更喜欢我添加的 LINQ 解决方案)
创建具有以下值的两个对象的列表:
编辑:使用 LINQ 的解决方案
我决定尝试一下所有这些都使用 LINQ,这就是我的想法:
它为每个包含仅 N 和 RGI 的键值对的项目生成数组。
如果您愿意,您可以删除
Where
,它将包含所有键及其值。Here is an attempt doing a search based on index: (I prefer my LINQ solution that I added)
Creates a list of two objects with following values:
EDIT: SOLUTION USING LINQ
I decided to try and do it all with LINQ and here is what I came up with:
It produces and array for each item that contains a Key Value pair of only N and RGI.
If you want you can remove the
Where
and it will include all they Keys and their Values.听着,我使用了正则表达式,对于相当数量的文本,它们表现良好。
hear ya go I used regular expressions and for a reasonable amount of text they preform well.
您可以将字符串解析为字典,然后提取您的值......
You could parse the string into a dictionary and then pull in your values...
我认为你应该尝试正则表达式。由于您使用的是 C#,请查看这个方便的 .NET RegEx 备忘单。
I think you should try a regular expression. Since you are using C#, check out this handy .NET RegEx cheat sheet.
不知道它是否比 RegEx 更有效,但这里有一个使用 LINQ to Objects 的替代方案。
Don't know if it's more efficient than RegEx, but here's a alternative using LINQ to Objects.