正则表达式匹配地址

时间:2012-09-23 09:22:54

标签: c# regex

我有以下要搜索的字符串集:

  

1Dept Neurosci,The Univ。新墨西哥州,ALBUQUERQUE,NM;为2mol。和   Human Genet。,Baylor Col. of Med。,Houston,TX; 3精神病学,大学   德克萨斯州西南医学院Ctr。,Dallas,TX; 4Clin。 Genet。,伊拉斯谟   大学。医学。 Ctr。,鹿特丹,荷兰; 5Human Genet。,Emory Univ。,   乔治亚州亚特兰大

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

  

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

我写了以下正则表达式:

\d\w+,*

它只匹配一个数字后跟一个单词。如何修改它。请建议有更好的方法。

我怎么能用(最后的数字)做同样的事情:

  

* X。 ZHAO1,W。GUO1,A. M. ALLAN1,R。ZONG2,L。ZHANG1,E.B.JOHNSON1,E.G.SCHALLER1,A.C。MURTHY1,S.L。GOGGIN1,2,A。EISCH3,4,B.A。   OOSTRA4,5,D。L. NELSON2,3,P。JIN5;

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

搜索似乎很复杂。我从上面的理解中理解了将搜索字符串并返回结果

我是根据以下字符串

进行的
  

1Dept Neurosci,The Univ。新墨西哥州,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();
    }
  }
}