2016-06-27 8 views
0

(もしあれば)私は、すなわち番号などの固有名詞にマッチする正規表現を作成しようとしていますFIFAワールドカップ2017固有名詞にマッチする正規表現+数字

私はこれがあります。

(?:\s*\b([A-Z][a-z]+)\b)+ 

を...数字なしの文字列を取得します。で

テスト:http://regexr.com/3dmuo

私は非常に多くのアプローチと周りいじってきましたが、正規表現は、私は私の能力を超えて少しあえて言うです。

アドバイスを事前にいただきありがとうございます。

+2

私はあなたの問題は正規表現の能力を超えているかもしれないと言っています。適切な名詞または数字ではないものは何ですか? –

+0

'((?:[A-Z] [a-z] + \ s *)\ d *)'はどうですか? –

答えて

0

これを試してみてください:

(?:\s*\b([A-Z][a-z]+)\b)+\s?(\d+)? 
1

このソリューションでは、数字が続く「固有名詞」が似ている単一ワードと一致する方法を示しています。これは、大文字で始まり、スペースに達するまでの任意の数の文字または数字、その後任意の桁数で始まる単語のような文字列に明示的に一致します。

data = [ 
 
    "I am reviewing Fifa 2017", 
 
    "I am reviewing Mighty No 9", 
 
    "I am writing about Unreal Engine", 
 
    "Are you interested in MotoGP 2017?", 
 
    "When does NASCAR 2017 start?", 
 
    "Can Team Ferrari win Formula1 2017?", 
 
    "Or will Red Bull take the Formula 1 2017 win?", 
 
    "I plan to see F-1 2019, so I best start planning now!", 
 
    "Have you used an Apple Mac Book Pro lately?", 
 
    "Microsoft makes consumer operating systems" 
 
]; 
 

 
for (var i in data) { 
 
    var match = data[i].match(/(?:\b[A-Z][A-Za-z0-9]+\b)(?:\s*\b[A-Z][A-Za-z0-9]+\b)*(?:\s*\d+)?/g); 
 
    if (match) { 
 
    console.log(data[i], " match: ", match) 
 
    } else { 
 
    console.log(data[i], " doesn't match!") 
 
    } 
 
}

使用されるデータは、「FIFAワールドカップ2017」の元の例にリフとして取られ、および他の主要なスポーツシーズンも表されています。ここにはさまざまな要件があります。

「F-1 2019」は、元の仕様を満たしていないため、失敗した例が1つあります。そのケースに合わせても難しくありませんが、仕様を拡張する必要があります。

仕様のため、誤った一致がいくつかあります。これらのマッチは、「固有名詞」(たとえば、「いつ」、「または」、「持っている」)または「固有名詞」内の数字にスペースで区切られた一致するテキスト(「式1 2017」など) "Formula 1"に一致しますが、 "2017"には一致しません)。これらは正規表現で厳密に扱うことができないかもしれませんし、一般的なケースでは解決するには複雑すぎるかもしれません。

入力テキストが適切に制約されている場合、このような検索は機能しますが、予期せず発生する例外が存在する可能性があります。

+0

@GeoffWrightこれがあなたの質問に答えるのに役立つなら、答えの隣にあるチェックマークをクリックして、これを受け入れられた答えとしてください。これを行うと、チェックマークの色が緑色に変わり、現在受け入れられていることを示します。ありがとう! :D –

関連する問題