请帮我解决这个问题。 我想将“-action = 1”拆分为“action”和“1”。
string pattern = @"^-(\S+)=(\S+)$";
Regex regex = new Regex(pattern);
string myText = "-action=1";
string[] result = regex.Split(myText);
我不知道为什么结果长度= 4。
result[0] = ""
result[1] = "action"
result[2] = "1"
result[3] = ""
请帮帮我。
P / S:我使用的是.NET 2.0。感谢。
你好,我用字符串测试:@“ - destination = C:\ Program Files \ Release”但它的结果不准确,我不明白为什么结果的长度= 1.我想因为它在字符串中有一个空格
我想把它拆分为“目的地”& “C:\ Program Files \ Release”
更多信息:这是我的要求: -string1 = string2 - >将其拆分为:string1&字符串2。 在string1& string2不包含字符:' - ','=',但它们可以包含空格。
请帮帮我。感谢。
答案 0 :(得分:5)
不要使用拆分,只需使用Match
,然后按索引(索引1和2)从Groups
集合中获取结果。
Match match = regex.Match(myText);
if (!match.Success) {
// the regex didn't match - you can do error handling here
}
string action = match.Groups[1].Value;
string number = match.Groups[2].Value;
答案 1 :(得分:3)
尝试此操作(已更新以添加Regex.Split
):
string victim = "-action=1";
string[] stringSplit = victim.Split("-=".ToCharArray());
string[] regexSplit = Regex.Split(victim, "[-=]");
编辑:使用您的示例:
string input = @"-destination=C:\Program Files\Release -action=value";
foreach(Match match in Regex.Matches(input, @"-(?<name>\w+)=(?<value>[^=-]*)"))
{
Console.WriteLine("{0}", match.Value);
Console.WriteLine("\tname = {0}", match.Groups["name" ].Value);
Console.WriteLine("\tvalue = {0}", match.Groups["value"].Value);
}
Console.ReadLine();
当然,如果您的路径包含-
字符
答案 2 :(得分:3)
在.NET Regex中,您可以为群组命名。
string pattern = @"^-(?<MyKey>\S+)=(?<MyValue>\S+)$";
Regex regex = new Regex(pattern);
string myText = "-action=1";
然后执行“匹配”并按组名称获取值。
Match theMatch = regex.Match(myText);
if (theMatch.Success)
{
Console.Write(theMatch.Groups["MyKey"].Value); // This is "action"
Console.Write(theMatch.Groups["MyValue"].Value); // This is "1"
}
答案 3 :(得分:0)
使用string.split()有什么问题?
string test = "-action=1";
string[] splitUp = test.Split("-=".ToCharArray());
我承认,虽然这仍然会给你提供比你想要在拆分数组中看到的更多的参数......
[0] = ""
[1] = "action"
[2] = "1"
答案 4 :(得分:0)
在他的演讲Regular Expression Mastery中,Mark Dominus attributes以下有用的规则 Learning Perl 作者(和fellow StackOverflow user)Randal Schwartz:
- 当您知道要保留的内容时,请使用捕获或
m//g
[或regex.Match(...)
]。- 当您知道要丢弃的内容时,请使用
split
。