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

本文关键字:数字 包围 字符串 文本 何提取 提取 | 更新日期: 2023-09-27 18:13:13

我试图在字符串中提取特定的数字,格式为"Q23-00000012-A14",我只想获得8位数00000000的数字。

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

但是我得到的结果是230000001214,我只想得到12而忽略其余的。

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

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

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

这比使用regex

更简单

编辑! !当您使用rx.split('-')时,它将字符串分解为字符串数组,其值在'-'之前和之后拆分文本

在这个例子中:

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

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

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

所以你不应该使用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
}

为什么使用不简单的子字符串或分割函数?

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();

(我认为这是一个更好的方式来使用分割方法,因为如果你改变你的常数'Q23'的长度方法仍然有效)