2011-09-01 33 views
1

我创建使用C#中使用字符串格式读取一个字符串转换成一个对象

String.Format(IPAddressRangeFormat, StartIP, EndIP); 

现在我需要读取的字符串回StartIP和EndIP对象的字符串。

在c#中最简单的方法是什么?

THanks, Li。

+0

能否请您包括更多的代码。有更多的上下文可以帮助人们理解你的问题。 –

+0

你能否发布你的变量的内容 – Gambrinus

+1

'IPAddressRangeFormat'的值是什么?这个问题没有通用的解决方案。 – Blorgbeard

回答

4

有没有简单的方法来做到这一点,因为String.Format的反向不是确定性的。

两个:

String.Format("{0}{1}", "123", "456") 
String.Format("{0}{1}", "12", "3456") 

给你123456。该机器不会只是猜测你想要哪一个。

然而,有一个更棘手的方法来做到这一点,你有正则表达式。

如果您有:

String.Format ("{0}-{1}", StartIP, EndIP); 

你可以使用一个表达式:

var matches = Regex.Match (String.Format ("{0}-{1}", "127.0.0.1", "192.168.0.1"), "(?<startIP>.*)-(?<endIP>.*)"); 
Console.WriteLine (matches.Groups["startIP"].Value); // 127.0.0.1 
Console.WriteLine (matches.Groups["endIP"].Value); // 192.168.0.1 
+0

在这种情况下使用正则表达式有点过分复杂。为什么不'String.Split(' - ')'? – IAbstract

+0

你可以为我给出的例子。但是,这只适用于一些有限的情况。对于反转格式字符串的一般情况,这正是正则表达式匹配的目的。不知道OP的具体情况,这是处理所有可能性的唯一方法。 –

+0

另外,一旦你克服了对正则表达式的恐惧,它们并不那么复杂。或者说,你可以有简单的正则表达式,你可以有复杂的 - 取决于你想要做什么。恕我直言'(?。*) - (?。*)'不是一个复杂的正则表达式,不应该花费任何努力去让一个有能力的编码者理解。 –

0

你想要做的事情叫做解析,它不能由String.Format方法执行。

2

可能是最好的方式有像IPRange这样的单独类型,在这里你将有两个IP在构造函数中并且被覆盖ToString()。钍解析你可能需要实现自定义逻辑,让我们说静态Parse(string)成员。

+0

无论如何,你将需要手动解析字符串 – Samich

0

根据您的IPAddressRangeFormat的格式,使用ToString()...然后string.Split(':') ...用正在使用的任何char替换':'。

我真的需要看到你的格式为IPAddressRangeFormat以提供更好的答案。

相关问题