我有一个格式为\\ State \ city的字符串
我想只返回State部分,然后只将city部分返回到各自的变量中。
我尝试使用^\\\\[a-zA-Z]\
的模式返回状态部分,然后使用^\\[a-zA-Z]
的模式来表示城市部分。结果总是一个空字符串。
state = Regex.Match("\\\Washington\\Seattle","^\\\\[a-zA-Z]\"].ToString();
答案 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", @"(?<=\\\\.*?\\).*");
祝你好运!