2013-02-08 23 views
7

私は句読点や空白を除いた文の最初の単語にマッチする正規表現を探しています。たとえば、「This is a sentence。」の「This」です。そして、で「最初の」Hello「最初は、私は\言いたい」\「」正規表現で最初の単語を一致させる

をこれは動作しません:!

"""([A-Z].*?(?=^[A-Za-z]))""".r 
+3

これは正規表現の味ですか? –

+0

単語に数字が入っていますか?しかし、それは非ラテン文字ではすばやく失敗するので、[Unicode文字クラスを使用する](http://www.windowsfiles.jp/privacy/)に更新してください。 – endy

+0

'([az] +)'は大文字と小文字を区別しません。 //stackoverflow.com/a/5005122/166390)必要に応じて!これはNFAの正規表現(Ruby:Dのようなもの)を前提としていることに注意してください。これは、できるだけ最初のものにマッチしますが、アンカーや複雑なルックアラウンドを必要としないのでここではうまくいきます。 –

答えて

2
[a-z]+ 

それが最初に取得されますので、これは十分なはずaz文字(大文字小文字を区別しないと仮定)。

それが動作しない場合は、[a-z]+\b、または^[a-z]\bでも試すことができますが、最後の文字列は単語で始まるものとみなされます。

7
(?:^|(?:[.!?]\s))(\w+) 

すべての文章の最初の単語に一致します。 ^\s*([a-zA-Z0-9]+)

http://rubular.com/r/rJtPbvUEwx

+0

私の投稿を編集しました。良いキャッチ。 – endy

+1

"This does not work"は、 "This"の代わりに "123"を返します。 – konyak

+0

これがその最初の単語です。 OPのように頼んだ。最初の辞書の単語に一致させたい場合は、正規表現以外の場所を探しているはずです。 – endy

1

あなたは、この正規表現を使用することができます。

キャプチャされたグループで最初の単語が見つかります。

1

この正規表現は、^[^\s]+または^[^ ]+です。

0

これは古いスレッドですが、私のように人々がこれを必要とするかもしれません。 あなたの文章が1つ以上の空白で始まっている場合、上記のどれも動作しません。 私は、文の最初の(非空の)単語を取得するためにこれをした:

(?<=^[\s"']*)(\w+) 

説明:文字列の先頭を探すために

(?<=^[\s"']*)肯定後読み、ゼロ以上の空白が続きます(角括弧の間にさらに追加することはできますが)マッチには含めないでください。
(\w+)彼らは後読みを満たさないとして、文の次の単語が一致しない

を返される単語、実際の試合。

関連する問題