2012-02-01 1 views
0

で)(グループを見つけるために正規表現を使用した:I培養物+サブ培養(理想的には、グループ1 & 2のそれぞれ)を収集するために、テキストの次のブロックを分析しようとしている繰り返し{}

ホーム神のエリシウム、アバロン、地上の楽園。 - ケルト(一般):マククロック・セルティック14。アイルランド語:ibid。 37f。、114ff。、Cross;ウェールズ:ibid。 193; Icel:MacCulloch Eddic 312ff。ヒンドゥー:Penzer I 125 n。 1。ユダヤ人:ノイマン.-ハワイ:ベックウィズミス67。そう。 Am。インド(Apapocuv \ xe1-Guarani):M \ xe9traux RMLP XXXIII 122;アフリカ(牙):Trilles 130

私の最高の試みは、これまでのところ、次の正規表現を使用している:

以下になり
(\w+)\.?\:|(\w+\.?\s?){0,3}\((.*?)\)\: 

[(u'', u'Celtic ', u'general'), (u'Irish', u'', u''), (u'Welsh', u'', u''), (u'Icel', u'', u''), (u'Hindu', u'', u''), (u'Jewish', u'', u''), (u'Hawaii', u'', u''), (u'', u'Indian ', u'Apapocuv\xe1-Guarani'), (u'', u'Africa ', u'Fang')] 

それに問題がありますそうではなく、「Apapocuv \ xe1-Guarani」の前に「インド人」しか得ていないということです。 Am。インド人。

  • (ヒンドゥー教、ユダヤ人のアイルランド、ハワイ)第二グループ'(\w+\.?\s?){0,3}'

    1. 最初のグループ'(\w+)\.?\:'で終わる任意の単語です:ここでは

      は、システム全体のための私のロジック/要件の内訳は、具体的に "So Am Am。Indian"を取得するためのものです。これは問題が発生しているセクションです。私はインド人だが、そうはしない。 Am。インド人。私はまた、 "ソー・インディアン・インディアン、インディアン・インディアン、インディアン・インディアン・インディアン・インディアン"などのバリエーションを得る必要があります

    2. 第3グループ'\((.*?)\)\'(第2セクションと一緒に)そう:アフリカ(牙)

    私は2つのグループでこれらの仕事を持っているのが大好きですが、私は後でコードに3を扱うことができます。誰かがアイデアを持っているなら、私は最も感謝しています。

  • 答えて

    0

    例(ジャバスクリプト)

    var s = "Home of the gods. Elysium, Avalon, earthly paradise.--Celtic (general): MacCulloch Celtic 14; Irish: ibid. 37f., 114ff., Cross; Welsh: ibid. 193; Icel.: MacCulloch Eddic 312ff.; Hindu: Penzer I 125 n. 1.; Jewish: Neuman.--Hawaii: Beckwith Myth 67; So. Am. Indian (Apapocuv\xe1-Guarani): M\xe9traux RMLP XXXIII 122; Africa (Fang): Trilles 130." 
    var rx = /(?:\-{2}|\;\s)((?:\w+\.\s)*\w+)(?:\s\(([^\)]+)\))?\:/g 
    
    while(m = rx.exec(s)){ 
        console.log(m[1] + ', ' + m[2]); 
    } 
    

    出力

    +0

    ワウありがとう!これは本当にうまくいって、私の2つのグループを簡素化するので、ありがとう。私の唯一の疑問は、(おそらく私が持つことができるように明確に指定しなかった)それは「So Am Am。私は、「So Am。Indian、SA Indian、So A. A. Indian、S. Am。Indian」のように、あらかじめ3つまで短縮された単語があるかどうかを知ることができる必要があります。再び。:) – theredknight

    +0

    例を更新しました。 –

    +0

    すごい!それは完璧に動作します!ありがとうございました! – theredknight

    0
    Celtic, general 
    Irish, undefined 
    Welsh, undefined 
    Hindu, undefined 
    Jewish, undefined 
    Hawaii, undefined 
    So. Am. Indian, Apapocuvá-Guarani 
    Africa, Fang 
    

    基に{0,3}ような繰り返しオペレータを追加に伴う問題は、そのグループの後方参照がされることです一致するたびに上書きされます。あなたは全体の繰り返し試合をキャプチャしたい場合は、ネストされたグループを使用する必要があります。

    (\w+).?\:|((\w+.?\s?){0,3})((.*?))\: 
    

    これはあなたが単に無視することができます(この場合は\2)余分な後方参照を生成しますが、それはあなたを気にすると、多くの正規表現エンジンは、参照されていないグループに対しても(?:)という構文を持っています:

    +0

    Hrrmm ...私はこれらの両方を試み、彼らは私に良い結果を与えていない。私はpythonを使用してre.findallあなたが使用していることを教えてくださいできますか?ありがとう! – theredknight

    関連する問題