[英]Why does my regular expression pattern in C# return an empty string?
我有一个格式为\\\\\\State\\city"
字符串。
我只想将 State 部分返回,然后只将 city 部分返回到相应的变量中。
我尝试使用^\\\\\\\\[a-zA-Z]\\
返回州部分,然后使用^\\\\[a-zA-Z]
模式返回城市部分。 结果总是一个空字符串。
state = Regex.Match("\\\Washington\\Seattle","^\\\\[a-zA-Z]\"].ToString();
反斜杠用作转义字符。 对于每一个( \\
)反斜杠,你需要两个反斜杠( \\\\
)。
此外,您在第二个正则表达式示例中不需要行锚^
的开头,因为该部分显然不在字符串的开头。 下面是如何执行此操作的示例。
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"
}
试试这个非正则表达式答案:
string data = @"\\Washington\Seattle";
string state = data.Trim('\\').Split('\\')[0];
string city = data.Trim('\\').Split('\\')[1];
Console.WriteLine("{0}, {1}", city, state);
这是修剪双反斜杠,然后在第一个反斜杠处拆分。
您需要在正则表达式中转义反斜杠。 所以任何地方你都会有一个\\
,而不是有\\\\
[a-zA-Z]
也只会匹配一次。 使用+
匹配一次或多次
所以这将使您的状态正则表达式:
^\\\\\\\\[a-zA-Z]+\\\\
此外,C# 中字符串中的反斜杠也需要转义。 所以要么再次加倍,要么使用@
字符:
state = Regex.Match(@"\\Washington\Seattle",@"^\\\\[a-zA-Z]+\\").ToString();
你只允许一个字符站在你的反斜杠之间。 你真正想要的是带星号的[a-zA-Z]*
。
考虑以下代码来匹配州和城市...
var state = Regex.Match(@"\\Washington\Seattle", @"(?<=\\\\).*(?=\\)");
var city = Regex.Match(@"\\Washington\Seattle", @"(?<=\\\\.*?\\).*");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.