0

私は次の文字列を持っています:

Giants 2 9 : 10 L.Tynes 22 yd . Field Goal ( 4 - - 3 , 1 : 20 ) 0 3 Cowboys 2 1 : 01 K.Ogletree 10 yd . pass from T.Romo ( D.Bailey kick ) ( 7 - 73 , 2 : 33 ) 7 3 Cowboys 3 10 : 24 K.Ogletree 40 yd . pass from T.Romo ( D.Bailey kick ) ( 9 - 80 , 4 : 36 ) 14 3 Giants 3 5 : 11 A.Bradshaw 10 yd . run ( L.Tynes kick ) ( 9 - 89 , 5 : 13 ) 14 10 Cowboys 3 0 : 40 D.Bailey 33 yd . Field Goal ( 8 - 65 , 4 : 31 ) 17 10 Cowboys 4 5 : 57 M.Austin 34 yd . pass from T.Romo ( D.Bailey kick ) ( 8 - 82 , 7 : 06 ) 24 10 Giants 4 2 : 36 M.Bennett 9 yd . pass from E.Manning ( L.Tynes kick ) ( 12 - 79 , 3 : 21 ) 24 17 Time : 2 : 53

サブトリングのプレフィックスは、「カウボーイズ」または「ジャイアンツ」のいずれかになります。文字列は常に右括弧)と2つの数字で終わります。

使用する正規表現を想像することすらできません。文字列関数を使用して文字列をループすることはできますが、後で正規表現が役立ちます。分割関数を使用できるかもしれませんが、それは私の頭の中にあります。

「カウボーイズ」、「ジャイアンツ」の順に解析できると思います。

4

2 に答える 2

1

私はこの正規表現があなたが望むものを与えると思います:

(Cowboys|Giants).*?\)\s\d+\s\d+

「カウボーイズ」または「ジャイアンツ」の後に任意の文字を続けて、正しいパレン、スペース、いくつかの数字、スペース、およびさらにいくつかの数字を取得します。

于 2012-09-19T19:12:03.407 に答える
0

私はColdFusionを知りませんが、これはPythonで機能します。

match = re.findall(re.compile('((Giants|Cowboys)(.(?!Cowboys|Giants))*.)', re.DOTALL), s)

提供された文字列はどこにありますかs。空白に一致re.DOTALLすることを意味します。グローバル検索を行うことを意味しますが、これもおそらく同様です。.re.findallreFindAll

正規表現はこれを行います:

  • スパニンググループを作成する
  • 開始文字列として「Giants」または「Cowboys」を探します
  • 文字列「Cowboys」または「Giants」が続かない文字()を探し、.可能な限り一致します(つまり、「Cowboys」または「Giants」が成功するまですべての文字を一致させます。
  • 別のキャラクターと一致します。

3つのグループがあるため、ColdFusionでは関心のあるグループの番号が異なる場合があります。Pythonでは、それらは親グループに埋め込まれています。

>>> match[0]
('Giants 2 9 : 10 L.Tynes 22 yd . Field Goal ( 4 - - 3 , 1 : 20 ) 0 3', 'Giants', '3')
>>> match[1]
('Cowboys 2 1 : 01 K.Ogletree 10 yd . pass from T.Romo ( D.Bailey kick ) ( 7 - 73 , 2 : 33 ) 7 3', 'Cowboys', '3')
>>> match[2]
('Cowboys 3 10 : 24 K.Ogletree 40 yd . pass from T.Romo ( D.Bailey kick ) ( 9 - 80 , 4 : 36 ) 14 3', 'Cowboys', '3')

match[1], match[4], match[7], ...他のほとんどの言語では、代わりに対処すると思います。

于 2012-09-19T19:31:16.863 に答える