0

検索する文字列のセットを以下に示します。

大学1部神経科学 ニューメキシコ州、アルバカーキ、ニューメキシコ州; 2モル。およびHumanGenet。、Baylor Col. of Med。、Houston ,, TX; 3大学精神医学 テキサス南西部医学の。Ctr。、テキサス州ダラス; 4Clin。エラスムス大学ジェネット Med。Ctr。、ロッテルダム、オランダ; 5Human Genet。、Emory Univ。、Atlanta、GA

上記は、数字で始まるアドレスのセットです(人にリンクするために使用されます)。すべてのアドレスを次のように検索する必要があります。

大学1部神経科学 ニューメキシコ州、アルバカーキ、
NM2Mol。and Human Genet。、Baylor Col. of Med。、Houston ,, TX
3Psychiatry、Univ。テキサス南西部医学の。Ctr。、テキサス州ダラス
4Clin。Genet。、ErasmusUniv。Med。Ctr。、ロッテルダム、オランダ
5Human Genet。、エモリー大学アトランタ、ジョージア州

私は以下の正規表現を書きました:

\d\w+,*

数字の後に単語が続く場合にのみ一致します。どうすれば変更できますか。もっと良い方法があることを提案してください。

(最後のDigit)で同じことを行うにはどうすればよいですか?

*バツ。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 ;

4

2 に答える 2

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);
}
于 2012-09-23T09:29:14.483 に答える
1

検索は複雑なようです。文字列が検索され、結果が返されるという上記の理解から私が理解したこと

私は次の文字列に基づいてそれをやっています

1東京大学神経科学科 ニューメキシコ州、ニューメキシコ州アルバカーキ

これがコードスニペットです。

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();
    }
  }
}

もう一つ。正規表現を生成して検索する必要がある場合は、これをチェックしてください。

これが役立つかどうか教えてください。

編集

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();
    }
  }
}
于 2012-09-23T10:07:38.433 に答える