我需要将一段字符串中的某个关键字的前面一部分取出来,可以这样表示:
abcd edfg 'asd key ' askjl key hjaksdkj kljals key fdasd
我想得到这样的两段字符串
abcd edfg 'asd key ' askjl key
hjaksdkj kljals key关键在于单引号'内的key不算关键字。谢谢了先!

解决方案 »

  1.   

    try
    using System;
    using System.Text.RegularExpressions;class TestKey
    {
      static void Main()
      {
    string s = "abcd edfg 'asd key ' askjl key hjaksdkj kljals key fdasd 'abcd e'dfg 'asd key ' askjl key xxx  fdfds 'ask key' ddd"; Regex re = new Regex(@"\G[^']*?('[^']*'[^']*?)*key", RegexOptions.IgnoreCase);
    Match m  = re.Match(s);
    int n=0;
    while (m.Success)
    {
    n++;
    Console.WriteLine(n+":"+m.Value);
    m = m.NextMatch();
    }
      }
    }
      

  2.   

    谢谢了!和我在ms newsgroup上的答案一模一样。呵呵
    思归大哥,还请问一下,对于这样的字符串,
    ( asdhkjasdh asdhj 'jh )_ ( as) ' asdhjk ) jkahsdh ( asdhcx nmsd ) 
    我需要获取括号内的字符串,但是引号内的括号不算,即得到的字符串应该是
     asdhkjasdh asdhj 'jh )_ ( as) ' asdhjk 
     asdhcx nmsd 
    请问该怎么写。
      

  3.   

    same idea:
    string s = "( asdhkjasdh asdhj 'jh )_ ( as) ' asdhjk ) jkahsdh ( asdhcx nmsd ) ";
    Regex re = new Regex(@"\((?<content>[^']*?('[^']*'[^']*?)*)\)", RegexOptions.IgnoreCase);
    Match m  = re.Match(s);
    int n=0;
    while (m.Success)
    {
    n++;
    Console.WriteLine(n+":"+m.Groups["content"].Value);
    m = m.NextMatch();
    }
      

  4.   

    五星的老大,ASP.NET的双龙!我学!
      

  5.   

    呵呵,我没有表达好。我的目的是这个
    ( asd asd ) adasd ((( asdhkjasdh asdhj 'jh )_ ( as) ' asdhjk ) jkahsdh ( asdhcx nmsd ))) 
    主要是括号的嵌套,mastering regular expressions上有个例子,但是不能如果引号中有括号就不行了。谢谢hot心的思归^_^
      

  6.   

    trystring s = "( asd asd ) adasd ((( asdhkjasdh asdhj 'jh )_ as) ' asdhjk ) jkahsdh ( asdhcx nmsd ))))) (x (y dd ))))"; Regex re = new Regex(@"\((?<content>(?>[^()']+?('[^']*'[^()']+?)*|\((?<PAREN>)|\)(?<-PAREN>))*(?(PAREN)(?!)))\)", RegexOptions.IgnoreCase);
    Match m  = re.Match(s);
    int n=0;
    while (m.Success)
    {
    n++;
    Console.WriteLine(n+":"+m.Groups["content"].Value);
    m = m.NextMatch();
    }
      

  7.   

    I F Le U.^_^
    多谢啦。