2

3 つの単語のいずれかで終わる文に一致する正規表現が必要です。

たとえば、miles と yards という 3 つの単語があるとします。

My_String = One 2012 年 10 月 5 日、ワシントン DC でレースが行われました。レースには 400 人のランナーが参加しました。レースの距離は 10 マイルでした。

一致させたいストリングが与えられた場合 = レースの距離は 10 マイルでした。

私は次のことを試しました:正規表現=/.\s.*[miles.|yards.]/

match = match.regex(My_String) `

しかし、これは、私が興味を持っている文だけでなく、私が興味を持っている文の前のすべての文に一致しています.

アップデート:

Kirill Polishchuk は、私をかなり近づけるような解決策を考え出しました (以下を参照)。残念ながら、これを Rubular 式テスターに​​入れると、対象の文が強調表示されるだけで、一致としては返されません。

Kirill の式は実際に機能していると思い始めていますが、テストに使用している Rubular エンジンではサポートされていない可能性があります。

最終更新:

次の表現は、対象の文と一致しました:

([^.]*(?:miles|yards)\.)

みんなの助けに感謝します。

4

2 に答える 2

2

これを試して:

[^.]*(?:miles|yards)\.

.この正規表現では、文が記号で終わると仮定しています。正規表現を使用して文の境界を決定することは非常に複雑です。

于 2012-10-07T23:26:22.700 に答える
0

OK、最初の問題は、括弧を使用する必要があるときに角括弧を使用していることです。[abc]は、角かっこ内の文字のいずれかに一致する単一の文字に一致します。したがって、 mまたはiまたはl (など)を含むすべての行に一致します。

もう一つの問題はそれです。本当にその文字に一致させたい場合は、エスケープする必要があります。エスケープされていない場合は、任意の 1 文字に一致する特別な正規表現文字です。したがって、a) かっこの外に移動し (2 回入力するだけでスペースが無駄になります)、b) * *でエスケープする必要があります。

正規表現の前半は不可解です。これは、任意の 1 文字 ( . )に一致し、その後に 1 つの空白項目 ( \s ) が続き、その後に任意の数の未指定の文字 ( .* ) が続きます。何を達成しようとしていますか?

于 2012-10-07T23:32:49.373 に答える