2012-05-12 8 views
19

の最初の出現にマッチします。これはもう少しです - ここに続けます。正規表現は、私はこの文字列を持っている文字列

私は最初の ' - 'で文字列を分割して 'city'(単なるサンプルワード、それは他の単語でもよい)を探したいと思います。プラスで ' - 'の後ろのテキストを見つけることができます。

私はこの表現に構築:

(^[\D\W\S]*)(-)([\D\W\S]*) 

をしかし、これは最後の発生を見つけた「 - 」の代わりに最初の1の。

最初の発生時にどのように停止できますか?

+4

ほとんどの言語は、特定の文字で文字列を分割しても、あなたは数を制限できるようにする機能を持っているそのような場合、あなたは怠惰な量指定子を使用することができます分割のこのような関数を使うべきです。使用している言語を教えていただければ、より多くのお手伝いをすることができます。 –

+0

これは正規表現エンジンに依存します。あなたは何を使っていますか? –

+3

是非、なぜこれをdownvote?それは公正な質問です、彼はそれにいくつかの研究努力を入れて、彼は何を試してみた。これは、ほとんどの新人よりもはるかに多くのことです。だから、私から、user1391459、StackOverflowへようこそ、そしてそこにハングアップ! (もっと良いユーザ名を選ぶのも良い考えです:)) –

答えて

38

最も簡単な解決策は、明示的にダッシュが最初のグループの一部であることを禁止するようになります:

^([^-]*) - (.*) 

説明:あなたの文字列ができれば

^  # Start of string 
([^-]*) # Match any number of characters except dashes 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 

しかし、これは失敗します最初のグループにダッシュが含まれています(スペースで囲まれていない)。

^(.*?) - (.*) 

説明:

^  # Start of string 
(.*?) # Match any number of characters, as few as possible 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 
+1

パーフェクト!非常に迅速な対応にも感謝します。テキストには改行があり、最後には省略する必要がある番号があるため、これは動作します:^(。*?) - ([\ D \ W \ S \ n] *)\ d {10 } – Gijs

+1

すばらしい、それを聞いてうれしい。しかし、あなたは '[\ D \ W \ S \ n] *'の代わりに '[\ S \ s] *'を使うのが良いでしょう。 –

関連する問題