又遇到问题了
不知道怎么处理空行问题~~
现在有如下文本:TID_FRS_BLOCKRESTORE 0xffffffff
{
IDS_TEXTCLIENT_INC_000273
}TID_MMI_DIALOG 0xffffffff
{
IDS_TEXTCLIENT_INC_000274
}TID_MMI_QUEST 0xffffffff
{
IDS_TEXTCLIENT_INC_000275
}现在要将:TID_MMI_DIALOG 0xffffffff
{
IDS_TEXTCLIENT_INC_000274
}分别独立起来,正则表达式怎么做呢?
或者如果提供"MMI_DIALOG"作为条件
怎么样将"IDS_TEXTCLIENT_INC_000274"提取出来呢?
下面是我的表达式:(?is)^TID+\s*.+\{[^{}].+\}

解决方案 »

  1.   

    貌似上次给你的是可以匹配哦。或是你修改一点点。
    (?is)TID[^{}]+{(?>{(?<b>)|}(?<-b>)|.)*(?(b)(?!))}
      

  2.   

    或是把你的修改一下(?is)TID.+?{[^{}]+?}
      

  3.   

    可以了
    谢了哦那如果是这种情况又怎解决呢?提供"MMI_DIALOG"作为条件
    怎么样将"IDS_TEXTCLIENT_INC_000274"提取出来呢?为什么我的语句就不行呢?哪里错了?下面是我对你的语句的理解不知道有没有错呢?

    匹配TID后面接除了换行符的任意字符,重复至少一遍,再次重复零到一遍,匹配“{”匹配,除了“{”或者“}”外的任何字符,重复至少一遍,再次重复零到一遍,匹配“}”

    不知道(?is)是什么意思呢?
    在这里?是表示什么意思?多多指教
      

  4.   

    is是模式修改
    i表示忽略大小写
    s表示.可以匹配换行回车。
      

  5.   

    正则不适合提取代码。
    最好还是看看编译原理,使用状态机分析。正则比较适合规则确定的。代码的规则还是蛮复杂的。比如可以多插入空格换行,比如可以用关键字修饰,可以用c#的string,也可以用String也可以用System.String ,可以用readonly修饰,等。
      

  6.   

    我也通过爬书找到了那几个的解释我做的是对一个文本文件的处理要提取某些内容编译原理 还没看不知道这个问题能否再帮忙解决下?提供"MMI_DIALOG"作为条件
    怎么样将"IDS_TEXTCLIENT_INC_000274"提取出来呢?
    麻烦你了
      

  7.   

    Regex.Match(yourStr,@(?is)\w+[^{}]+?MMI_DIALOG[^{]+{\s*?(\S*)\s*?}").Groups[1].Value
      

  8.   


    稍微改进了一下刚才你的表达式有点慢
    (?is)MMI_DIALOG[^{]+{\s*?(\S*)\s*?}
    前面的那些不必要吧!
      

  9.   

    看你要求了。如果你还需要确定TID_的话。不要可以。
      

  10.   

    嗯。的确很明显。
    那就不要判断前面的了。的确多余。
    一共用时:1062毫秒(1.062秒) [1000次]★表达式1:(?is)MMI_DIALOG[^{]+{\s*?(\S*)\s*?}
    执行时间:16毫秒(0.016秒) 占总时间1.51%★表达式2:(?is)\w+[^{}]+?MMI_DIALOG[^{]+{\s*?(\S*)\s*?}
    执行时间:1046毫秒(1.046秒) 占总时间98.49%