如何在数字和文本C#包围的字符串中提取特定数字

时间:2014-07-16 08:20:09

标签: c# regex

我正在尝试提取格式为“Q23-00000012-A14”的字符串中的特定数字我只想获得12位数字00000000中的数字。

string rx = "Q23-00000012-A14"
string numb = Regex.Replace(rx, @"\D", "");
txtResult.Text = numb;

但是我得到230000001214的结果,我只想得到12而忽略其余的。有人可以指导我。

3 个答案:

答案 0 :(得分:8)

如果你的字符串总是采用这种格式(数字用""覆盖),我建议使用string.split()

 string rx = "Q23-00000012-A14"
 string numb = int.parse(rx.Split('-')[1]).ToString();//this will get 12 for you

 txtResult.Text = numb;

这比使用正则表达式更容易

编辑!!当你使用rx.split(' - ')时,它会将字符串分解为字符串数组,其中包含'之前和之后的分割文本的值 - '

所以在这种情况下:

rx.Split(' - ')[0] =" Q23"

rx.Split(' - ')[1] =" 00000012"

rx.Split(' - ')[2] =" A12"

答案 1 :(得分:4)

所以你不应该使用Replace。请改用Match

string pattern = @"[A-Z]\d+-(\d+)-[A-Z]\d+" ; 

var regex = new Regex(pattern);
var match = regex.Match("Q23-00000012-A14");
if (match.Success)
{
     String eightNumberString = match.Groups[1].Value;  // Contains "00000012" 
     int yourvalueAsInt = Convert.ToInt32(eightNumberString) ; // Contains 12
}

答案 2 :(得分:2)

为什么你使用的不仅仅是子串或拆分函数?

string rx = "Q23-00000012-A14";

// substring
int numb = int.Parse(rx.Substring(5, 8));

// or split
int numb = int.Parse(rx.Split('-')[1]);


txtResult.Text = numb.ToString();

(我认为这是使用split方法的更好方法,因为如果你改变常量'Q23'长度,方法仍然有效)