2012-09-23 260 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); 
}