本帖最后由 jiangsheng 于 2010-11-17 09:37:02 编辑

解决方案 »

  1.   


    void Main()
    {
    string s=" goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的";
    GroupCollection m= Regex.Match(s,@"(?i)(.*)\<\w+\>(.*?)\(.*\)(.*),(.*)\[.*\](.*),(.*)").Groups;
     
    Console.WriteLine(m[1].Value+m[2].Value+m[3].Value);
    Console.WriteLine(m[1].Value+m[4].Value+m[5].Value);
    Console.WriteLine(m[1].Value+m[6].Value+m[7].Value);
    }/*
     goop 信笺上方的文字
     goop 印有抬头的信笺
     goop 文盲的*/
      

  2.   

    是可以弄出来 但是问题又来了 我有很多这样的数据啊 例如:goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen   [生]泛子,胚芽(一种假设的原生质粒)
    panglossian   过分乐观的,认为一切都趋于至善的 过分乐观者要把这一段提取成:
    goop 信笺上方的文字
    goop 印有抬头的信笺
    goop 文盲的
    pangen 泛子
    pangen 胚芽
    panglossian 过分乐观的
    panglossian 认为一切都趋于至善的 
    panglossian 过分乐观者
    类似这样的数据很多 我该怎么办啊 ?
      

  3.   

    //不要太依赖正则  有些不用正则也是可以实现的
    //比如这句的分割:
    void Main()
    {
    string s=" panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者";
    string[] ss=s.Split(new char[]{' ',','},StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(ss[0] +" " +ss[1]);
    Console.WriteLine(ss[0] +" " +ss[2]);
    Console.WriteLine(ss[0] +" " +ss[3]);
    }/*
    panglossian 过分乐观的
    panglossian 认为一切都趋于至善的
    panglossian 过分乐观者*/
      

  4.   

    不是啊前辈们  我现在是有很多这样的数据  他们是用文件流读出来的  读出来的数据就是以下(有很多长度标点都是不固定的):
    goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者要把这一段提取成以下模式 在用文件流打出来:
    goop 信笺上方的文字
    goop 印有抬头的信笺
    goop 文盲的
    pangen 泛子
    pangen 胚芽
    panglossian 过分乐观的
    panglossian 认为一切都趋于至善的  
    panglossian 过分乐观者
      

  5.   

       public static void Main()
        {
            string temp = @"goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
                            pangen [生]泛子,胚芽(一种假设的原生质粒)
                            panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者";        MatchCollection mc = Regex.Matches(temp, "^.+$",RegexOptions.Multiline);
            foreach (Match m in mc)
            {
                string[] t = m.Value.Trim().Split(' ', ',');
                Console.WriteLine(t.Length);
            }
        }
    得到t了 你会处理了吧
      

  6.   

    try    public static void Test()
        {
            string yourStr = @"goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者
    ";
            StringBuilder builder = new StringBuilder();
            string result = Regex.Replace(yourStr, @"(?m)^(\w+)\s*(?:(?:<[^>]*>|\([^()]*\)|\[[^[]]*\]|[,.?!\s])([^()<>\[\]\r\n,.?!]+))+",
                delegate(Match m)
                {
                    builder.Remove(0, builder.Length);//清理
                    foreach (Capture c in m.Groups[2].Captures)
                    {
                        builder.AppendLine(m.Groups[1].Value + " " + c.Value);
                    }
                    return builder.ToString();
                });
            Console.WriteLine(result);
        }result就是你要的结果。
      

  7.   

    er..
    规则理解错了。修改一下
    测试    public static void Test()
        {
            string yourStr = @"goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者
    ";
            StringBuilder builder = new StringBuilder();
            string result = Regex.Replace(yourStr, @"(?m)^(\w+)\s*(?:(?:<[^>]*>|[,.?!\s])([^<>\r\n,.?!\s]+))+",
                delegate(Match m)
                {
                    builder.Remove(0, builder.Length);//清理
                    foreach (Capture c in m.Groups[2].Captures)
                    {
                        builder.AppendLine(m.Groups[1].Value + " " + Regex.Replace(c.Value,@"\([^()]*\)|\[[^\[\]]*\]",""));
                    }
                    return builder.ToString();
                });
            Console.WriteLine(result);
        }输出goop 信笺上方的文字
    goop 印有抬头的信笺
    goop 文盲的pangen 泛子
    pangen 胚芽panglossian 过分乐观的
    panglossian 认为一切都趋于至善的
    panglossian 过分乐观者
      

  8.   

    wuyazhe 前辈 麻烦你把这段提取下呗 我做的时候有点问题
    goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者
    striped-pants   过于注重形式的,刻板的,礼貌上的
    stripfilm   幻灯片 (幻灯)片带,片条
    stripline   带状线
    stripling   年轻人,小伙子
    stripper   清除的人,剥离器
    stript   <罕>strip 的过去式和过去分词
    striptease   脱衣舞 跳脱衣舞
      

  9.   

    你想要什么结果?我觉得你规则会很不明确,比如
    stript <罕>strip 的过去式和过去分词
    按空格分隔的话就不合理了。
    striped-pants 过于注重形式的,刻板的,礼貌上的
    这么说逗号也是分隔的条件之一?
      

  10.   

        private static void TestRegex02()
        {
            string yourStr = @"goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    panglossian 过分乐观的,认为一切都趋于至善的 过分乐观者
    striped-pants 过于注重形式的,刻板的,礼貌上的
    stripfilm 幻灯片 (幻灯)片带,片条
    stripline 带状线
    stripling 年轻人,小伙子
    stripper 清除的人,剥离器
    stript <罕>strip 的过去式和过去分词
    striptease 脱衣舞 跳脱衣舞
    ";
            StringBuilder builder = new StringBuilder();
            string result = Regex.Replace(yourStr, @"(?m)^(\S+)\s*(?:(?:[,.?!\s]|<[^>]*>)([^<>\r\n,.?!\s]+))+",
                delegate(Match m)
                {
                    builder.Remove(0, builder.Length);//清理
                    foreach (Capture c in m.Groups[2].Captures)
                    {
                        builder.AppendLine(m.Groups[1].Value + " " + Regex.Replace(c.Value, @"\([^()]*\)|\[[^\[\]]*\]", ""));
                    }
                    return builder.ToString();
                });
            Console.WriteLine(result);
        }
    输出goop 信笺上方的文字
    goop 印有抬头的信笺
    goop 文盲的pangen 泛子
    pangen 胚芽panglossian 过分乐观的
    panglossian 认为一切都趋于至善的
    panglossian 过分乐观者striped-pants 过于注重形式的
    striped-pants 刻板的
    striped-pants 礼貌上的stripfilm 幻灯片
    stripfilm 片带
    stripfilm 片条stripline 带状线stripling 年轻人
    stripling 小伙子stripper 清除的人
    stripper 剥离器stript strip
    stript 的过去式和过去分词striptease 脱衣舞
    striptease 跳脱衣舞
      

  11.   

    刚才没考虑到短语 还有短语这种类型
    用正则将以下这几种类型 :goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    striped-pants 过于注重形式的,刻板的,礼貌上的
    a beam in 's own eye   某人自身的大缺点
    a beaten track   踏出的路,常规,惯例
    gosport   戈斯波特[英国英格兰南部港市]; (飞机座舱间的)通话软管
    提取成:goop 信笺上方的文字
    goop 印有抬头的信笺
    goop 文盲的
    striped-pants 过于注重形式的
    striped-pants 刻板的
    striped-pants 礼貌上的
    a beam in 's own eye 某人自身的大缺点
    a beaten track 踏出的路
    a beaten track 常规
    a beaten track 惯例
    gosport 戈斯波特
    gosport 通话软管
      

  12.   

    如果特定环境,认为就是英文的话。
    测试    private static void TestRegex03()
        {
            string yourStr = @"goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    striped-pants 过于注重形式的,刻板的,礼貌上的
    a beam in 's own eye 某人自身的大缺点
    a beaten track 踏出的路,常规,惯例
    gosport 戈斯波特[英国英格兰南部港市]; (飞机座舱间的)通话软管
    ";
            StringBuilder builder = new StringBuilder();
            string result = Regex.Replace(yourStr, @"(?im)^([a-z'\- ]+)\s*(?:(?:[,.?!\s]|<[^>]*>)([^<>\r\n,.?!\s]+))+",
                delegate(Match m)
                {
                    builder.Remove(0, builder.Length);//清理
                    foreach (Capture c in m.Groups[2].Captures)
                    {
                        builder.AppendLine(m.Groups[1].Value + " " + Regex.Replace(c.Value, @"\([^()]*\)|\[[^\[\]]*\]|;", ""));
                    }
                    return builder.ToString();
                });
            Console.WriteLine(result);
        }
    输出goop  信笺上方的文字
    goop  印有抬头的信笺
    goop  文盲的striped-pants 过于注重形式的
    striped-pants 刻板的
    striped-pants 礼貌上的a beam in 's own eye 某人自身的大缺点a beaten track 踏出的路
    a beaten track 常规
    a beaten track 惯例gosport 戈斯波特
    gosport 通话软管
      

  13.   

    但是这段用文件流 输入进来后就 变成这样了:goop  信笺上方的文字
    goop  印有抬头的信笺
    goop  文盲的striped-pants 过于注重形式的,刻板的,礼貌上的
    a beam
    a in
    a 's
    a own
    a eye
    a 某人自身的大缺点a beaten
    a track
    a 踏出的路
    a 常规
    a 惯例gosport 戈斯波特
    gosport 通话软管
      

  14.   

    我多打点要不  规制不够用。。  帮忙再解决一下把用正则把以下:air fleet   机群,航空机队
    air force   空军,美国空军
    air gas   风煤气(含有空气的煤气,供点灯,取暖用)
    air gun   气枪,空气枪
    air hammer   气锤
    air hole   气孔,河中不冰冻部分
    athymic   [医]无胸腺的
    atilt   挺着长矛,摆着冲刺的架势,倾斜
    atingle   刺痛的,兴奋的,疼痛的
    atishoo   阿嚏(打喷嚏的拟声)
    atka fish   [鱼](产于北太平洋,特别是阿留申群岛海域的)多线鱼
    atka mackerel   [鱼](产于北太平洋,特别是阿留申群岛海域的)多线鱼
    striped-pants 过于注重形式的,刻板的,礼貌上的
    stripssed-pasdfnts 过于注重形式的,刻板的,礼貌上的
    goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    goops <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    pangens [生]泛子,胚芽(一种假设的原生质粒)
    提取成以下:air fleet   机群
    air fleet    航空机队
    air force   空军
    air force   美国空军
    air gas   风煤气
    air gun   气枪
    air gun      空气枪
    air hammer   气锤
    air hole   气孔
    air hole     河中不冰冻部分
    athymic   无胸腺的
    atilt   挺着长矛
    atilt    摆着冲刺的架势
    atilt    倾斜
    atingle   刺痛的
    atingle      兴奋的
    atingle  疼痛的
    atishoo   阿嚏
    atka fish   多线鱼
    atka mackerel   产于北太平洋
    atka mackerel   特别是
    atka mackerel   多线鱼
    striped-pants 礼貌上的
    striped-pants 过于注重形式的
    striped-pants 刻板的,
    stripssed-pasdfnts 过于注重形式的,刻板的,礼貌上的
    stripssed-pasdfnts 刻板的
    stripssed-pasdfnts 礼貌上的
    goop 信笺上方的文字
    goop 印有抬头的信笺
    goop 文盲的
    goops 信笺上方的文字
    goops 印有抬头的信笺
    goops 文盲的
    pangen 泛子
    pangen 胚芽
    pangens 泛子
    pangens 胚芽
      

  15.   

    你的规则实在不明确。
    atka mackerel [鱼](产于北太平洋,特别是阿留申群岛海域的)多线鱼
    这个你怎么规则中海能保留()中的内容呢。哪些保留哪些不保留这个规则不明确的话软件不用正则都无法识别的吧。
    如果不是这个。其他的都对的上,你有些顺序贴错了。
    测试    private static void TestRegex04()
        {
            string yourStr = @"air fleet 机群,航空机队
    air force 空军,美国空军
    air gas 风煤气(含有空气的煤气,供点灯,取暖用)
    air gun 气枪,空气枪
    air hammer 气锤
    air hole 气孔,河中不冰冻部分
    athymic [医]无胸腺的
    atilt 挺着长矛,摆着冲刺的架势,倾斜
    atingle 刺痛的,兴奋的,疼痛的
    atishoo 阿嚏(打喷嚏的拟声)
    atka fish [鱼](产于北太平洋,特别是阿留申群岛海域的)多线鱼
    atka mackerel [鱼](产于北太平洋,特别是阿留申群岛海域的)多线鱼
    striped-pants 过于注重形式的,刻板的,礼貌上的
    stripssed-pasdfnts 过于注重形式的,刻板的,礼貌上的
    goop <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    goops <古>信笺上方的(印刷)文字,印有抬头[律]的信笺,文盲的
    pangen [生]泛子,胚芽(一种假设的原生质粒)
    pangens [生]泛子,胚芽(一种假设的原生质粒)
    ";
            StringBuilder builder = new StringBuilder();
            string result = Regex.Replace(yourStr, @"(?im)^([a-z'\- ]+)\s*(?:(?:<[^>]*>|(?<!\([^)]*)[,\s])((?:\([^)]*\)|[^\r\n,]+?)+))+",
                delegate(Match m)
                {
                    builder.Remove(0, builder.Length);//清理
                    foreach (Capture c in m.Groups[2].Captures)
                    {
                        builder.AppendLine(m.Groups[1].Value + " " + Regex.Replace(c.Value, @"\([^()]*\)|\[[^\[\]]*\]|;", ""));
                    }
                    return builder.ToString();
                });
            Clipboard.SetText(result);
            Console.WriteLine(result);
        }输出air fleet 机群
    air fleet 航空机队air force 空军
    air force 美国空军air gas 风煤气air gun 气枪
    air gun 空气枪air hammer 气锤air hole 气孔
    air hole 河中不冰冻部分athymic 无胸腺的atilt 挺着长矛
    atilt 摆着冲刺的架势
    atilt 倾斜atingle 刺痛的
    atingle 兴奋的
    atingle 疼痛的atishoo 阿嚏atka fish 多线鱼atka mackerel 多线鱼striped-pants 过于注重形式的
    striped-pants 刻板的
    striped-pants 礼貌上的stripssed-pasdfnts 过于注重形式的
    stripssed-pasdfnts 刻板的
    stripssed-pasdfnts 礼貌上的goop  信笺上方的文字
    goop  印有抬头的信笺
    goop  文盲的goops  信笺上方的文字
    goops  印有抬头的信笺
    goops  文盲的pangen 泛子
    pangen 胚芽pangens 泛子
    pangens 胚芽