帮我用RegEx分割字符串

时间:2010-01-20 10:16:35

标签: c# regex

请帮我解决这个问题。 我想将“-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不包含字符:' - ','=',但它们可以包含空格。

请帮帮我。感谢。

5 个答案:

答案 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
  •