C# 为正则表达式创建方法

C# 为正则表达式创建方法,c#,regex,C#,Regex,我正在尝试调用一个方法。方法应该做的是查找并获取存储在字符串中的数字。这个号码是我的后端数据库的ID号。现在,无论何时调用此方法,它都应该删除在该数字开头添加的数字,包括“-”,并且还应该删除“Message:” 下面是我正在尝试运行的代码 public void RegexMatch() { string pat = @"-{1,}[0-9]*$"; Regex r = new Regex(pat, RegexOptions.IgnoreCase); } string voi

我正在尝试调用一个方法。方法应该做的是查找并获取存储在字符串中的数字。这个号码是我的后端数据库的ID号。现在,无论何时调用此方法,它都应该删除在该数字开头添加的数字,包括“-”,并且还应该删除“Message:”

下面是我正在尝试运行的代码

public void RegexMatch()
 {
   string pat = @"-{1,}[0-9]*$";
   Regex r = new Regex(pat, RegexOptions.IgnoreCase);
 }

string void Main(strings[] args)
{
  String myLine = "Message:  Data have been confirmed -564673154463";
  if (myLine.StartWith("Message: "))
  {
    myLine = myLine.Replace("Message: ", "");
    myLine = RegexMatch()// replacing numbers with blank    
  }
}
原始代码:

String myLine = "Message: You Data is confirmed -564673154463";
if (myLine.StartsWith("Message"))
{
    string pat = @"-{1,}[0-9]*$";
    Regex r = new Regex(pat, RegexOptions.IgnoreCase);
    Match m = r.Match(myLine);
    myLine = myLine.Replace("Message: ", "");
    myLine = r.Replace(myLine, "");
    string output = myLine.TrimStart();
    Console.WriteLine(output);
}
问题 我在RegexMatch()中缺少什么可以帮助我调用该方法?


有人能帮我吗?如果有人不理解任何部分,请在此张贴问题以获得澄清。

如果您想替换数字,那么,只需替换:


请注意,我已经更改了模式:
{,1}
只是
*
中的
[0-9]*
意味着单个
-
是一个数字,因此如果您希望在整个应用程序中使用最简单的方法,我将
*
更改为
+
,您可以创建如下扩展方法:

public static class ExtensionMethods
{
    public static string RemoveNumbers(this string source)
    {
        return Regex.Replace(source, "-?[0-9]+", "").Trim();
    }
}
String myLine = "Message:  Data have been confirmed -564673154463";
if (myLine.StartsWith("Message: "))
{
    myLine = myLine.Replace("Message: ", "");
    myLine = myLine.RemoveNumbers();
}
Console.WriteLine(myLine);
然后你就这么简单地称呼它:

public static class ExtensionMethods
{
    public static string RemoveNumbers(this string source)
    {
        return Regex.Replace(source, "-?[0-9]+", "").Trim();
    }
}
String myLine = "Message:  Data have been confirmed -564673154463";
if (myLine.StartsWith("Message: "))
{
    myLine = myLine.Replace("Message: ", "");
    myLine = myLine.RemoveNumbers();
}
Console.WriteLine(myLine);
我还调用了
Trim()
,以删除任何可能的剩余空间,如“Data”之前的空间

您可能希望创建一个方法来执行整个逻辑,而不是只执行
Regex
部分,如果这是您在应用程序中实际要重复使用的。例如:

public static class ExtensionMethods
{
    public static string GetMessage(this string source)
    {
        if (source.StartsWith("Message: "))
        {
            source = source.Replace("Message: ", "");
            source = Regex.Replace(source, "-?[0-9]+", "").Trim();
        }
        return source;
    }
}

class Program
{
    static void Main(string[] args)
    {
        String myLine = "Message:  Data have been confirmed -564673154463";
        Console.WriteLine(myLine.GetMessage());
        Console.ReadKey();
    }
}

请注意,它是
static void Main
,而不是
string void Main

您的意思并不清楚。发布的代码甚至不会编译,因为您试图将
void
方法结果分配给变量。你到底想在这里做什么?你是在寻找
Regex.Replace
?你的方法是void,不返回任何东西
public void RegexMatch()
,所以这是你的第一个问题。。将方法签名更改为
string
,如果
r
类型为string
string void
没有意义且
StartWith
不存在(缺少's'),则在RegExMatch方法中返回return
r。@Andrew StartWith检查条件,如果行以**消息开头:*,则执行以下条件。”我没有得到它。在
RemoveNumbers()处获取错误该注释没有帮助。为什么不指定错误?请注意,扩展方法必须位于单独的类中。
'string不包含'Removenumbers'的值,并且找不到接受'string'类型的第一个参数的扩展方法'Removenumbers'。
是的,我在单独的类中执行了此操作。您一定缺少某些内容,它们是否共享命名空间?我在我的答案中添加了更多的代码,你可以复制并粘贴在同一个文件中的整个块,它必须工作。在那之后,最好将扩展方法移动到一个单独的文件中。是的,我确实遗漏了一些东西。