如何创建一个在字符串后返回数字的正则表达式模式 - C#

时间:2013-01-25 16:36:48

标签: c# regex

我正在尝试创建一个返回结果的模式,如下所示 给出清单:

Help # 7256
Help # 83930
ph  # 7222
this is a test example
Help # 029299
New # 92929

输出:

Help # 7256 
Help # 83930 
Help # 029299

任何以#符号后面的帮助开头,然后是3,4,5数字值

我试过这样的事情

Regex pattern = new Regex(@"(Help #) (^|\D)(\d{3, 4,5})($|\D)");

有人可以帮我创建这个图案吗? (在C#中)

3 个答案:

答案 0 :(得分:3)

/^Help\s*#\s*(\d{3,5})/gm

Demo

我应该补充说,这也符合OP中指定的Help # 029299,即使它包含6个字符。

如果想要匹配3到5个字符,则可以执行此操作:

/^Help\s*#\s*(\d{3,5})\b/gm

Demo

注意:如果您只想匹配“Help[SPACE]#[SPACE]number”,则只需删除所有\s*

答案 1 :(得分:2)

一个简单的解决方案,假设您希望获得以Help #开头的所有行(无论后面是什么),并且输入文件的格式是一致的:

if (currentLine.StartsWith(@"Help #"))
{
    // Do something with the line
}

String.StartsWith方法参考。

如果你想要正则表达式解决方案,这里是正则表达式(在文字字符串中):

@"^Help #\s+(\d+)"

这可以与Regex.Match(String)一起使用。您可以从捕获组1中选取数字。此选项仅匹配以Help #开头的行,后跟任意数量的空格,然后至少1位数。请注意,如果您逐行扫描文件,则只能使用此正则表达式。

如果必须将其限制为3-5位数:

@"^Help #\s+(\d{3,5})"

答案 2 :(得分:1)

对于C#,试试这个:

var list = new string[] { 
    "Help", "Help # 7256", "Help # 83930", 
    "ph # 7222", "this is a test example", 
    "Help # 029299", "New # 92929",
    "Help # 7256 8945", "Help # 83930 8998 787989"
};

// bear in mind that the $ at the end matches only these strings
// if you want it to match something like Help # 1284 12841 0933 SUBJECT HERE"
// then remove the $ from the end of this pattern
const string pattern = @"^(Help)\s#\s(\d{3,6})\s?(\d{3,6})?\s?(\d{3,6})?$";

var regex = new Regex(pattern);
foreach (string s in list)
{
    if (regex.Match(s).Success)
        Console.WriteLine(s);
}
Console.WriteLine("Done.");
Console.ReadKey();

输出:

Help # 7256
Help # 83930
Help # 029299
Help # 7256 8945
Help # 83930 8998 787989