0

如何从 a 中提取值 2 string pid = {id=2}

我的代码看起来像

string pidnew= pid.Substring(3,5)

它显示我错误,我做错了什么吗?

4

3 回答 3

2

要从类似的字符串中获取单个值string pid = "{id=2, genderid=5, stateid=4}",您可以使用以下方法:

public string GetValue(string idPart, string test)
{
    var escIdPart = Regex.Escape(idPart);
    var pattern = string.Format("(?<=[\\{{\\s,]{0}\\s*=\\s*)\\d+", escIdPart);
    var result = default(string);
    var match = Regex.Match(test, pattern, RegexOptions.IgnoreCase);
    if (match.Success)
    {
        result = match.Value;
    }
    return result;
}

...

var pid = "{id=2, genderid=5, stateid=4}";

var id = GetValue("id", pid); // returns "2"
var genderid = GetValue("genderid", pid); // returns "5"
var stateid = GetValue("stateid", pid); // returns "4"
于 2013-10-25T17:26:47.910 回答
1

如果只有一个数字,您可以对其进行正则表达式

string pidnew = Regex.Match(pid, @"\d+").Value;

而且您无需担心位置

如果你想在 stateid 上匹配:

string pidnew = Regex.Match(pid, @"(?<=stateid=)\d+",RegexOptions.IgnoreCase).Value;
于 2013-10-25T17:20:36.020 回答
0

for的第二个参数Substring告诉要占用的字符数。因此,如果您有字符串 "{id=2}" 并执行string pidnew= pid.Substring(3,5),那么您的意思是:“从字符串中的字符索引 3 开始(第四个字符),并取五个字符”。这意味着字符串至少需要 8 个字符长。由于您只想取一个字符,请将第二个参数更改为 1。如果括号是字符串的一部分,您还应该从索引 4 而不是 3 开始。

你真正需要的是:string pidnew= pid.Substring(4,1);

MSDN 文档:

参数

startIndex 类型:System.Int32 此实例中子字符串的从零开始的起始字符位置。

length 类型:System.Int32 子字符串中的字符数。

于 2013-10-25T17:25:14.227 回答