我正在尝试提取格式为“Q23-00000012-A14”的字符串中的特定数字我只想获得12位数字00000000中的数字。
string rx = "Q23-00000012-A14"
string numb = Regex.Replace(rx, @"\D", "");
txtResult.Text = numb;
但是我得到230000001214的结果,我只想得到12而忽略其余的。有人可以指导我。
答案 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'长度,方法仍然有效)