C# 从字符串输入中查找变量并用正则表达式c提取它#

C# 从字符串输入中查找变量并用正则表达式c提取它#,c#,regex,C#,Regex,~我有一个客户端正在向我的服务器发送消息,我正在尝试获取子字符串,以便将它们提取到变量中。我想用正则表达式来做这个。虽然我没有语法问题,但它不会匹配。这是我正在发送的消息和我的代码 “放置/John\r\n\r\n 伦敦“ private StreamReader sReader=null; 私有StreamWriter sWriter=null; 公共套接字类(套接字s) { 插座=s; NetworkStream nStream=新的网络流; sReader=新的StreamReader(n

~我有一个客户端正在向我的服务器发送消息,我正在尝试获取子字符串,以便将它们提取到变量中。我想用正则表达式来做这个。虽然我没有语法问题,但它不会匹配。这是我正在发送的消息和我的代码

“放置/John\r\n\r\n 伦敦“

private StreamReader sReader=null;
私有StreamWriter sWriter=null;
公共套接字类(套接字s)
{
插座=s;
NetworkStream nStream=新的网络流;
sReader=新的StreamReader(nStream);
sWriter=新的StreamWriter(nStream);
startSocket();
}
字符串txt=“”;
而(sReader.Peek()>=0)
{
txt+=sReader.ReadLine()+“\r\n”;
}
else if(txt.Contains(“PUT”))
{
控制台写入线(“触发”);
正则表达式模式=新正则表达式(@“PUT/(?\d+)\r\n\r\n(?\d+)\r\n);
Match=pattern.Match(txt);
如果(匹配成功)
{
字符串名称=匹配。组[“名称”]。值;
字符串位置=匹配。组[“位置”]。值;
Console.WriteLine(名称);
控制台写入线(位置);
}
}

问题似乎在于,当您的输入包含字母数字字符时,您的正则表达式正在查找属于数字的
\d
。正则表达式可以很容易地更改为以下格式:

Regex pattern = new Regex(@"PUT /(?<Name>.+)\r\n\r\n(?<Location>.+)\r\n");
Regex模式=新的Regex(@“PUT/(?)+)\r\n\r\n(?)\r\n);

表示任何字符。也许你可以缩小范围,说匹配必须是字母字符或其他字符,但上述内容肯定适用于给定的输入。

如果你想匹配换行符/CR字符,将
RegexOptions.SingleLine
作为参数传递给Regex构造函数。我已经添加了参数,但它仍然不匹配。您需要在一些字符前加前缀。像
/
/
一样,您的输入字符串的结尾没有(a)
\r\n
,并且(b)将与
\d+
不匹配,这意味着一个或多个数字。您的输入字符串在正则表达式中LF和CR字符之间有不匹配的空格。这个问题是假的。谢谢你的回答,我首先尝试用PUT/(?。+)\r\n\r\n(?。+)\r\n替换整行,但这给我带来了一个异常。然后我尝试用“.”s替换“d”s,这修复了异常,但仍然不匹配。我实际上修复了它。非常感谢你!!
Regex pattern = new Regex(@"PUT /(?<Name>.+)\r\n\r\n(?<Location>.+)\r\n");