2012-01-26 17 views
3

数字を含む単語を抽出する必要があります。数字を含む単語を抽出する正規表現

例: -

入力 - 3909Bウィトマー道。ナイアガラの滝。 NY 14305

出力は - あなたが数-EYの単語を抽出したいわけ3909Bと14305

+6

を代わりに必要性を宣言するの、質問を明記してください。 – jason

答えて

8

使用この正規表現:

\w*\d\w* 

は、ここでのアクションでそれを参照してください。 http://regexr.com?2vqui

+0

ありがとうございます:) – Dan

0

var matches = Regex.Matches(input, @"\d\w*"); 

foreach (Match match in matches) { 
    var numWord = match.Value; // 3909B, etc. 
} 
+0

これは 'B3909'と一致しません –

+0

@Joseph:正しいです。 OPがそれを望んでいるかどうかは、解釈に開かれているかどうか;-) – Cameron

+0

ありがとうございました。正に+ \ wを追加する必要があります。正しい正規表現は@ "\ w + \ d + \ w *" – Dan

0

これは単語を扱うことができる最も簡単な正規表現です

(\w*\d[\w\d]+) 

だからこれはあなたの希望の言葉にマッチします、プラスそれはabc123xyz 'と一致します:それは、文字と数字の混合物を持っています。 Try it yourself.

+0

'+'を '*'に変更したい場合や、1桁の数字と一致しない場合があります。 ) – Cameron

+1

実際、これはもっと簡単です: '\ w * \ d \ w *' –

+0

@Joseph:でも同じことはしません。それは '14305'から' 1'だけマッチします。 – Cameron

1

基本的な式は次のようになります。

  1. | [^] +

    • OR -
    (< = ^?)(= [^] * \ dは?)
  2. (W * \ D [\ Wの\ D] + \)

そして、C#でそれを使用する:

var matches = Regex.Matches(input, @"(\w*\d[\w\d]+)"); 

foreach (Match match in matches){ 
     var word = match.Value; 
} 

... 

var matches = Regex.Matches(input, @"(?<=^|)(?=[^ ]*\d)[^ ]+"); 

foreach (Match match in matches){ 
    var word = match.Value; 
} 
+0

これらの式は等価ではありません。 – Cameron

関連する問題