C# 如何从字符串名称中获取值?

C# 如何从字符串名称中获取值?,c#,string,C#,String,如何从包含在“I”和“p”之间的文件名“I1P706.jpg”中获取值,因此在本例中它应该是“1”? 通常,此值的长度可以大于1 sumbol string input = "I1P706.jpg"; // Get the characters by specifying the limits string sub = input.Substring(1,3); 在这种情况下,输出将为1P 您还可以使用切片功能 的切片(1,4)将返回eac获取I和p的索引,然后获取从iIndex开始的子字符串

如何从包含在“I”和“p”之间的文件名“I1P706.jpg”中获取值,因此在本例中它应该是“1”? 通常,此值的长度可以大于1 sumbol

string input = "I1P706.jpg";
// Get the characters by specifying the limits
string sub = input.Substring(1,3);
在这种情况下,输出将为
1P

您还可以使用
切片
功能


的切片(1,4)
将返回
eac
获取I和p的索引,然后获取从iIndex开始的子字符串(可能需要+1)以计算I和p之间的字符数(即p-I)

使用正则表达式:

var r = new Regex(@"I(\d+)P.*");
var match = r.Match(input, RegexOptions.IgnoreCase);
if (match.Success)
{
    int number = 0; // set a default value
    int.TryParse(match.Groups[1].Value, out number);
    Console.WriteLine(number);
}

我猜你想要两个数字:

using System.Text.RegularExpressions;

RegEx rx(@"I(\d+)P(\d+)\.jpg");

Match m = rx.Match("I1P706.jpg");

if(m.Success)
{
    // m.Groups[1].Value contains the first number
    // m.Groups[2].Value contains the second number
}
else
{
    // not found...
}

此正则表达式将只提供I和p之间的所有字符,忽略大小写。这将允许I和P之间的数字增长

示例

string fileName = "I1222222P706.jpg";

Regex r = new Regex(@"(?<=I)(.*?)(?=P)",
      RegexOptions.Singleline | RegexOptions.IgnoreCase);

var result = r.Split(fileName).GetValue(1);
stringfilename=“i12222p706.jpg”;

正则表达式r=新正则表达式(@“(?它总是在那个位置吗?你试过什么?它只会是一个数字吗?总是在
I
P
之间吗?这些总是在字符串的开头吗?结果需要什么数据类型?字符串?Int?其他什么?你的问题并不表明你至少读过手册。谁否决了所有答案没有评论吗?但是它的长度可以超过1@revolutionkpi-你没有这么说。每个答案都被某人否决了,没有留下任何评论。这个答案不会返回期望的结果
1
,而是
I1
。我已经强调了+1可能是必需的。我现在已经把它放在代码示例中了。这样会得到1P的结果,你知道吗可能需要将其更改为介于nianDP=myString.Substring(iIndex+1,pIndex-1)之间的-string;
var input = "I1P706.jpg";
var indexOfI = input.IndexOf("I");
var result = input.Substring(indexOfI + 1, input.IndexOf("P") - indexOfI - 1);
string fileName = "I1222222P706.jpg";

Regex r = new Regex(@"(?<=I)(.*?)(?=P)",
      RegexOptions.Singleline | RegexOptions.IgnoreCase);

var result = r.Split(fileName).GetValue(1);