首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

如何样才能把某些零散的字符串组成小弟我想要的字符串

2013-08-01 
怎么样才能把某些零散的字符串组成我想要的字符串我现在手头上有形如这样的一组字符串00-01-08(hex)AVLAB

怎么样才能把某些零散的字符串组成我想要的字符串
我现在手头上有形如这样的一组字符串
  00-01-08   (hex)AVLAB Technology, Inc.
  000108     (base 16)AVLAB Technology, Inc.
  3F-1, No. 134, Sec. 3
Chung Shin Road
Hsin Tien, Taipei  
TAIWAN, PROVINCE OF CHINA
我想给整理成

m_Companies.Add("00-01-08", new PhysAddressCompany("00-01-08", "000108", "AVLAB Technology, Inc.", "3F-1, No. 134, Sec. 3 Chung Shin Road Hsin Tien, Taipei TAIWAN, PROVINCE OF CHINA"));

样子,但是所在txt里还有像下面这样的字符
  00-01-09   (hex)Nagano Japan Radio Co., Ltd.
  000109     (base 16)Nagano Japan Radio Co., Ltd.
  Nagano Japan Radio Co., Ltd.

  00-01-01   (hex)PRIVATE
  000101     (base 16)
这样我想就变成
m_Companies.Add("00-01-09", new PhysAddressCompany("00-01-09", "000109", "Nagano Japan Radio Co., Ltd.", ""));

m_Companies.Add("00-01-01", new PhysAddressCompany("00-01-01", "000101", "PRIVATE", ""));

也会有那种只能在 utf-8里识别的出的字符像下面这样

  00-01-2A   (hex)Telematica Sistems Inteligente
  00012A     (base 16)Telematica Sistems Inteligente
  Rua Miguel Casagrande, 200
S?o Paulo  
BRAZIL
规律是一组的上下都有空行,能不能用正则表达式识别出或者有其他什么更简单的,更不容易错的方法,但是第一第二行的括号部分想不出怎么去掉。因为有1万5千组这样的文本,所以不知道有什么速度快效率高的方法 正则表达式
[解决办法]
正则表达式匹配,用string.Format拼接。
[解决办法]
测试如下
 string input = @"00-01-08   (hex) AVLAB Technology, Inc.
  000108     (base 16) AVLAB Technology, Inc.
   3F-1, No. 134, Sec. 3


Chung Shin Road
Hsin Tien, Taipei  
TAIWAN, PROVINCE OF CHINA

00-01-09   (hex) Nagano Japan Radio Co., Ltd.
  000109     (base 16) Nagano Japan Radio Co., Ltd.
   Nagano Japan Radio Co., Ltd.

  00-01-01   (hex) PRIVATE
  000101     (base 16) 
";
            string pattern = @"(?i)(\d+-\d+-\d+)\s*?\([^()]*?\)\s*?([^\n]*?)\s*?(\d+)\s*?\([^()]*?\)\s*?[^\n]*?\s*?\n\s*?(\s*?(?<v>[^\n]*?)\s*?\n?\s*?)*?(?=\d+-
[解决办法]
$)";

            var result = Regex.Matches(input, pattern).OfType<Match>().Select(a => new 
            { 
                v1=a.Groups[1].Value,
                v2=a.Groups[2].Value,
                v3=a.Groups[3].Value,
                v4 = string.Join(" ", a.Groups["v"].Captures.OfType<Capture>().Select(b => b.Value))

            });
            /*
            +[0]{ v1 = "00-01-08", v2 = " AVLAB Technology, Inc.", v3 = "000108", v4 = "   3 F - 1 ,  N o .  1 3 4 ,  S e c .  3   C h u n g  S h i n  R o a d   H s i n  T i e n ,  T a i p e i     T A I W A N ,  P R O V I N C E  O F  C H I N A    " }<Anonymous Type>
+[1]{ v1 = "00-01-09", v2 = " Nagano Japan Radio Co., Ltd.", v3 = "000109", v4 = "   N a g a n o  J a p a n  R a d i o  C o . ,  L t d .      " }<Anonymous Type>


+[2]{ v1 = "00-01-01", v2 = " PRIVATE", v3 = "000101", v4 = "" }<Anonymous Type>





             */


[解决办法]
(?i)是忽略大小写

另外只能根据你提供的字符串来进行匹配,如果说格式变化了,也不会匹配成功,至于其他格式匹配出来的效果是怎样的,只能具体情况具体分析
[解决办法]
测试
string Url = "http://standards.ieee.org/develop/regauth/oui/oui.txt";
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url);
            using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
            {
                using (StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("utf-8")))
                {
                    string txt = sr.ReadToEnd();
                    string pattern = @"(?i)([\da-z]+-[\da-z]+-[\da-z]+)\s*?\([^()]*?\)\s*?([^\n]*?)\s*?([\da-z]+)\s*?\([^()]*?\)\s*?[^\n]*?\s*?\n\s*?(\s*?(?<v>[^\n]*?)\s*?\n?\s*?)*?(?=\n
[解决办法]
$)";
                    //string pattern = @"(?i)(\d+-\d+-\d+)\s*?\([^()]*?\)\s*?([^\n]*?)\s*?(\d+)\s*?\([^()]*?\)\s*?[^\n]*?\s*?\n\s*?(\s*?(?<v>[^\n]*?)\s*?\n?\s*?)*?(?=\d+-
[解决办法]
$)";
                    var result = Regex.Matches(txt, pattern).OfType<Match>().Select(a => new
                    {
                        v1 = a.Groups[1].Value,
                        v2 = a.Groups[2].Value,


                        v3 = a.Groups[3].Value,
                        v4 = string.Join(" ", a.Groups["v"].Captures.OfType<Capture>().Select(b => b.Value))

                    });
                    
                }
            }

热点排行