2012-09-23 195 views
0

我在下面设置的字符串进行搜索:正则表达式匹配地址

1Dept神经科学,该大学。新墨西哥州,ALBUQUERQUE,NM;为2mol。人类遗传学,Baylor Col. of Med。,Houston,TX;和 。 3精神科,大学。得克萨斯州西南医学院的 。 Ctr。,Dallas,TX; 4Clin。 Genet。,Erasmus Univ。医学。 Ctr。,荷兰鹿特丹; 。5Human遗传学,埃默里大学, 佐治亚州亚特兰大

上面是一组地址,它以数字(用于将其链接到人)。需要开始搜索所有的地址为:

1Dept Neurosci,The Univ。新墨西哥州,ALBUQUERQUE,NM
2 Mol。 and Human Genet。,Baylor Col.of Med。,Houston ,, TX
3精神病学, Univ。德克萨斯州西南医学中心Ctr。,Dallas,TX
4Clin。 Genet。, ErasmusUniv。医学。 。CTR,鹿特丹,荷兰
5Human遗传学, 埃默里Univ.Atlanta,GA

我已经写了下面的正则表达式:

\d\w+,* 

它仅匹配一个数字,然后按一个字。我该如何修改它。请建议有没有更好的方法。

我如何做(在最后一位数字)同样的事情:

* X。 ZHAO1,W. GUO1,AM ALLAN1,R.ZONG2,L. ZHANG1,EB JOHNSON1,EG SCHALLER1,AC MURTHY1,SL GOGGIN1,2,A.EISCH3,4,BA OOSTRA4,5,DL NELSON2,3,P. JIN5;

+0

你最好指定输入要求。所有地址都用分号隔开吗?如果是这样,任何地址是否可以包含分号?等等。 – poplitea

+0

不需要分号。需要搜索到下一个分数。 – Burfi

+0

@Burfi数字在最后..不理解你..给我们一些有效的例子 – Anirudha

回答

1

搜索似乎复杂。我从上面的认识了解,该字符串将被搜索,结果将返回

我基于以下字符串

1Dept神经科学,在大学这样做。新墨西哥州,ALBUQUERQUE,NM

这里是代码片段。

using System; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string txt="1Dept Neurosci, The Univ. of New Mexico, ALBUQUERQUE, NM "; 

     string re1="(\\d+)"; // Integer Number 1 
     string re2="((?:[a-z][a-z]+))"; // Word 1 
     string re3=".*?"; // Non-greedy match on filler 
     string re4="((?:[a-z][a-z]+))"; // Word 2 
     string re5="(,)"; // Any Single Character 1 
     string re6="(.*?),"; // Command Seperated Values 1 

     Regex r = new Regex(re1+re2+re3+re4+re5+re6,RegexOptions.IgnoreCase|RegexOptions.Singleline); 
     Match m = r.Match(txt); 
     if (m.Success) 
     { 
      String int1=m.Groups[1].ToString(); 
      String word1=m.Groups[2].ToString(); 
      String word2=m.Groups[3].ToString(); 
      String c1=m.Groups[4].ToString(); 
      String csv1=m.Groups[5].ToString(); 
      Console.Write("("+int1.ToString()+")"+"("+word1.ToString()+")"+"("+word2.ToString()+")"+"("+c1.ToString()+")"+"("+csv1.ToString()+")"+"\n"); 
     } 
     Console.ReadLine(); 
    } 
    } 
} 

还有一件事。如果你需要生成正则表达式并搜索它,你可能想要退房this

请让我知道这是否有帮助。

编辑

using System; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string txt="X. ZHAO1,"; 

     string re1="((?:[a-z][a-z0-9_]*))"; // Variable Name 1 
     string re2="(\\.)"; // Any Single Character 1 
     string re3="(\\s+)"; // White Space 1 
     string re4="((?:[a-z][a-z0-9_]*))"; // Variable Name 2 
     string re5="(,)"; // Any Single Character 2 

     Regex r = new Regex(re1+re2+re3+re4+re5,RegexOptions.IgnoreCase|RegexOptions.Singleline); 
     Match m = r.Match(txt); 
     if (m.Success) 
     { 
      String var1=m.Groups[1].ToString(); 
      String c1=m.Groups[2].ToString(); 
      String ws1=m.Groups[3].ToString(); 
      String var2=m.Groups[4].ToString(); 
      String c2=m.Groups[5].ToString(); 
      Console.Write("("+var1.ToString()+")"+"("+c1.ToString()+")"+"("+ws1.ToString()+")"+"("+var2.ToString()+")"+"("+c2.ToString()+")"+"\n"); 
     } 
     Console.ReadLine(); 
    } 
    } 
} 
+0

谢谢,我会试一试。你能回答我更新的问题吗? – Burfi

+0

检查新的答案。希望有帮助.. – pordi

+0

我试过更新的部分,它的工作很好,我如何从结果中排除结尾(,)。 – Burfi

3

简单regex,因为你需要(以数字开头):

\d+[^\d]+ 

解释:

\d+      digits (0-9) 
         (1 or more times, matching the most amount possible) 

[^\d]+     any character except: digits (0-9) 
         (1 or more times, matching the most amount possible) 

和示例代码:

var strInput = "1Dept Neurosci, The Univ. of New Mexico, ALBUQUERQUE, NM; 2Mol. and Human Genet., Baylor Col. of Med., Houston,, TX; 3Psychiatry, Univ. of Texas Southwestern Med. Ctr., Dallas, TX; 4Clin. Genet., Erasmus Univ. Med. Ctr., Rotterdam, Netherlands; 5Human Genet., Emory Univ., Atlanta, GA"; 

var adresses = new List<string>(); 

foreach (Match match in Regex.Matches(strInput, @"\d+[^\d]+")) 
{ 
    adresses.Add(match.Value); 
}