正则表达式从给定字符串中提取特定字符串

时间:2013-05-10 08:33:46

标签: c# regex string

我有一个字符串:"abc xyz: ID# 1000123, this is test, test 1, test 1234, "

我需要编写正则表达式来提取ID 1000123

我尝试过这样的事情:

Regex betweenOfRegexCompiled = new Regex("ID# (.*), ", RegexOptions.Compiled);

但它给出" 1000123,这是测试,测试1,测试1234"。

那么,如何指定", "的第一次出现?

4 个答案:

答案 0 :(得分:3)

而不是.*使用\d+

"ID# (\d+)"

.*匹配任意数量的字符。 \d+匹配一个或多个数字(如果您要排除非西方数字,请使用[0-9]代替\d)。

答案 1 :(得分:3)

这是(更有效的)非正则表达式方法:

string text = "abc xyz: ID# 1000123, this is test, test 1, test 1234, ";
string id = null;
int idIndex = text.IndexOf("ID# ");
if(idIndex != -1)
{
    idIndex += "ID# ".Length;
    int commaIndex = text.IndexOf(',', idIndex);
    if(commaIndex != -1)
        id = text.Substring(idIndex, commaIndex - idIndex);
    else
        id = text.Substring(idIndex);
}

Demo

答案 2 :(得分:2)

试试这个注册表,它应该取正确的数字

(?<=ID\#\s)\d+(?=\,)

如果在 ID#之后和之前找到号码,

答案 3 :(得分:1)

获取数字(即所有字符,但不包括第一个逗号)...

"ID# ([^,]*),"

如果你想要数字表达那么......

"ID# ([0-9]*),"

对于非正则表达式 ...

string text = "abc xyz: ID# 1000123, this is test, test 1, test 1234, ";
string num = text.Split(new Char[] {','})[0].Split(new Char[] {' '})[3];