C#格式化字符串,以便从中获取不同的值

C#格式化字符串,以便从中获取不同的值,c#,string,format,C#,String,Format,设置以下字符串格式的最佳方法是什么,这样我就可以分离并找到PractitionerId、PhysicianNPI、PhysicianName等的值 “实习医生ID:43343434,医生NPI:43434,医生姓名: 约翰,多伊,医生电话:22222,医生传真:3333“ 所以最后我想要这样的东西: var practitionerId = "4343343434 "; var physNPI = "43434343434"; var phyName = "John, Doe"; 我想用名称

设置以下字符串格式的最佳方法是什么,这样我就可以分离并找到PractitionerId、PhysicianNPI、PhysicianName等的值

“实习医生ID:43343434,医生NPI:43434,医生姓名: 约翰,多伊,医生电话:22222,医生传真:3333“

所以最后我想要这样的东西:

var practitionerId = "4343343434 ";
var physNPI = "43434343434";
 var phyName = "John, Doe";

我想用名称拆分并找到分配给每个字段的值,但我不确定这是否是最好的解决方案

由于您使用“,”分隔信息,因此应该可以:

   string[] information = yourWholeString.Split(",");
   string practitionerId = information[0];
   string physNPI = information[1];
   string phyName = information[2] + information[3];

您可以通过以下操作获得准确的信息:

var str = "PractitionerId:4343343434 , PhysicianNPI: 43434343434, PhysicianName: John, Doe, PhysicianPhone:2222222222 , PhysicianFax:3333333333 ";

var newStr = str.Split(','); 

var practitionerID = newStr[0].Split(':')[1]; // "4343343434"
var physicianNPI = newStr[1].Split(':')[1].Trim(); // "43434343434"
var phyName = newStr[2].Split(':')[1].Trim() + "," + newStr[3]; // "John, Doe"
不过,有一些更干净的解决方案使用正则表达式模式


此外,您还需要将相应的变量解析为所需的特定数据类型。这里的所有内容都被视为一个
字符串

您可能可以使用正则表达式对其进行推广,然后使用它来构建术语词典/查找

因此:


PhysicianName:John,Doe,是使用
Split(',')
TextParserField(
)执行此操作的障碍:(我想你真的需要自定义过程,当你说“格式化字符串”时,你的意思是你可以更改字符串的内容吗?还是你真的想“解析字符串”.Format意味着从一个数据到另一个字符串,parse意味着从一个字符串到另一个数据。如果您可以更改字符串的生成方式,我强烈建议您切换到生成XML或其他易于解析的格式。最好修复产生这种混乱的内容。有时您使用
,“
,有时使用
,”
,有时值之间甚至会有一个逗号。使用不同的分隔符,如制表符和严格的格式。我认为医生的名字实际上是“John Doe”-这就是这个解决方案的问题所在。@Jamiec为什么你实际上是“John Doe”。他说想要相同的“var phyName=”John,Doe““哦,是的,”杰米克我把它修好了。现在,他应该得到正确的答案了answer@LinhTuan我怀疑在“现实生活”中,这实际上是“Doe,John”。名字通常被sylsize为“Lastname,firstname”和“John Doe”是一个不知名男性的普通名字。好吧,但这不是他问的。我只是给了他想要的。这是他的设计决定。我的答案没有错@jamiec
var input= "PractitionerId:4343343434 , PhysicianNPI: 43434343434,"
           + " PhysicianName: John, Doe, PhysicianPhone:2222222222 ,"
           + " PhysicianFax:3333333333";

var pattern = @"(?<=(?<n>\w+)\:)\s*(?<v>.*?)\s*((,\s*\w+\:)|$)";
var dic = Regex
              .Matches(input, pattern)
              .Cast<Match>()
              .ToDictionary(m => m.Groups["n"].Value, 
                            m => m.Groups["v"].Value);
var practitionerId = dic["PractitionerId"];
var physicianName = dic["PhysicianName"];