c#中的正则表达式返回空字符串

时间:2014-05-15 23:28:07

标签: c# regex

我有一个格式为\\ State \ city的字符串 我想只返回State部分,然后只将city部分返回到各自的变量中。 我尝试使用^\\\\[a-zA-Z]\的模式返回状态部分,然后使用^\\[a-zA-Z]的模式来表示城市部分。结果总是一个空字符串。

state = Regex.Match("\\\Washington\\Seattle","^\\\\[a-zA-Z]\"].ToString();

5 个答案:

答案 0 :(得分:5)

反斜杠用作转义字符。对于每个单个\)反斜杠,您需要两个反斜杠(\\)。

此外,您不需要在第二个正则表达式示例中使用行锚^的开头,因为该部分显然不在字符串的开头。以下是如何执行此操作的示例。

String s = @"\\Washington\Seattle";
Match m  = Regex.Match(s, @"(?i)^\\\\([a-z]+)\\([a-z]+)");

if (m.Success) {
   String state = m.Groups[1].Value;
   String city  = m.Groups[2].Value;

   Console.WriteLine("{0}, {1}", city, state); // => "Seattle, Washington"
} 

答案 1 :(得分:2)

尝试这个非RegEx答案:

string data = @"\\Washington\Seattle";
string state = data.Trim('\\').Split('\\')[0];
string city = data.Trim('\\').Split('\\')[1];

Console.WriteLine("{0}, {1}", city, state);

这是修剪双反斜杠,然后在第一个反斜杠处分割。

答案 2 :(得分:0)

你需要在正则表达式中转义反斜杠。因此,只要你有一个\,就有\\

同样[a-zA-Z]只匹配一次。使用+匹配一次或多次

这样会使你的状态正则表达式:

^\\\\[a-zA-Z]+\\

此外,C#中的字符串中的反斜杠也需要进行转义。所以要么再次加倍,要么使用@字符:

state = Regex.Match(@"\\Washington\Seattle",@"^\\\\[a-zA-Z]+\\").ToString();

答案 3 :(得分:0)

你只允许一个角色站在你的反斜杠之间。你真正想要的是什么 [a-zA-Z]*与星号。

答案 4 :(得分:0)

考虑以下代码来匹配州和城市......

var state = Regex.Match(@"\\Washington\Seattle", @"(?<=\\\\).*(?=\\)");
var city = Regex.Match(@"\\Washington\Seattle", @"(?<=\\\\.*?\\).*");

祝你好运!

相关问题