C# 为正则表达式创建方法
我正在尝试调用一个方法。方法应该做的是查找并获取存储在字符串中的数字。这个号码是我的后端数据库的ID号。现在,无论何时调用此方法,它都应该删除在该数字开头添加的数字,包括“-”,并且还应该删除“Message:” 下面是我正在尝试运行的代码C# 为正则表达式创建方法,c#,regex,C#,Regex,我正在尝试调用一个方法。方法应该做的是查找并获取存储在字符串中的数字。这个号码是我的后端数据库的ID号。现在,无论何时调用此方法,它都应该删除在该数字开头添加的数字,包括“-”,并且还应该删除“Message:” 下面是我正在尝试运行的代码 public void RegexMatch() { string pat = @"-{1,}[0-9]*$"; Regex r = new Regex(pat, RegexOptions.IgnoreCase); } string voi
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
类型为stringstring void
没有意义且StartWith
不存在(缺少's'),则在RegExMatch方法中返回returnr。@Andrew StartWith检查条件,如果行以**消息开头:*,则执行以下条件。”我没有得到它。在RemoveNumbers()处获取错误代码>该注释没有帮助。为什么不指定错误?请注意,扩展方法必须位于单独的类中。'string不包含'Removenumbers'的值,并且找不到接受'string'类型的第一个参数的扩展方法'Removenumbers'。
是的,我在单独的类中执行了此操作。您一定缺少某些内容,它们是否共享命名空间?我在我的答案中添加了更多的代码,你可以复制并粘贴在同一个文件中的整个块,它必须工作。在那之后,最好将扩展方法移动到一个单独的文件中。是的,我确实遗漏了一些东西。