「stop」で始まる文字列に一致する正規表現


97

文字列の先頭にある単語に一致する正規表現を作成するにはどうすればよいですか。stop文字列の先頭で一致するものを探しており、何でもそれに続くことができます。

たとえば、式は次のように一致する必要があります。

stop
stop random
stopping

ありがとう。

回答:


184

使用停止で始まる行のみを一致させたい場合

^stop

ストップという単語で始まり、その後にスペースが続く行に一致させる場合

^stop\s

または、stopという単語で始まり、その後にスペースまたはその他の非単語文字のいずれかが続く行に一致させる場合(正規表現のフレーバーが許可する場合)

^stop\W

一方、後続の文字列は、ほとんどの正規表現フレーバーの文字列の先頭にある単語に一致します(これらのフレーバーでは、\ wは\ Wの反対に一致します)。

^\w

フレーバーに\ wショートカットがない場合は、使用できます

^[a-zA-Z0-9]+

この2番目のイディオムは文字と数字のみに一致し、シンボルにはまったく一致しないことに注意してください。

正規表現フレーバーマニュアルを確認して、許可されているショートカットと、それらが正確に一致するもの(およびUnicodeの扱い方)を確認してください。


27
回答を一般化するための+1。Stack Overflowでこれをもっと見たいです。私の意見ではそれをより良い学習リソースにします。
ジム、

大文字と小文字を区別しないようにする方法、つまり、StopまたはStopまたはsTopに一致させる
Elton Garcia de Santana

言語によって異なります... Perl互換ではI修飾子を使用できます。/ regex / i .NET RegexOptions.IgnoreCaseなど
Vinko Vrsalovic

^stop\b行末を含むすべての境界を許可することを忘れないでください
Mad Physicist

80

これを試して:

/^stop.*$/

説明:

  • /文字は正規表現を区切ります(つまり、それらは正規表現自体の一部ではありません)
  • ^は、行の先頭で一致することを意味します
  • *が後に続くと、任意の文字(。)、任意の回数(*)に一致することを意味します
  • $は行の終わりを意味します

その停止の後に空白を強制したい場合は、次のようにRegExを変更できます。

/^stop\s+.*$/
  • \ sは任意の空白文字を意味します
  • +\ sの後に続く場合、ストップワードの後に​​少なくとも1つの空白文字が続く必要があります。

注:上記のRegExでは、ストップワードの後に​​スペースが続く必要があることにも注意してください。:それだけ含まれている行と一致しないように停止を


すべての言語が正規表現を区切るためにスラッシュを使用するわけではありません。
JAB

1
@Cat Megex:それが私が説明を付け加えた理由です。言語が正規表現を区切るために何か他のものを使用している場合、/を適切な文字に置き換えます
Mike Dinescu

1
@Mezはい、そのような冗長性により、明快さとパフォーマンスの両方が向上しますrexegg.com/regex-optimizations.html#anchors
MarredCheese

28

単語の後に何かを一致させたい場合は、行の先頭だけでなく、次のものを使用できます:\bstop.*\b-単語の後に行

文字列の終わりまでの単語

それとも、文字列の使用中の単語を一致させたい場合\bstop[a-zA-Z]*- ストップで始まる単語だけを

ストップで始まる言葉だけ

または、^stop[a-zA-Z]*単語のみのストップ付きの行の先頭- 最初の単語のみ
行全体^stop.*- 文字列の最初の行のみ

そして、改行を含めて、stopで始まるすべての文字列に一致させたい場合は、次のようにします。/^stop.*/s- stopで始まる複数行の文字列


19

@SharadHolaniが言ったように。これは、「stop」で始まるすべての単語に一致するわけではありません。」で

。" stop going "のような行の先頭にある場合のみ。@Waxoは正しい答えを出しました:

stop」で始まり、AからZまで文字のみを含む単語と一致させたい場合、これは少し良いです。

\bstop[a-zA-Z]*\b

これはすべてに一致します

ストップ(1)

ランダムに停止(2)

停止(3)

やめたい(4)

やめてください(5)

だが

/^stop[a-zA-Z]*/

(3)までは(1)にのみ一致し、(4)&(5)には一致しません


8
/stop([a-zA-Z])+/

すべてのストップワードに一致します(stop、stopped、stoppingなど)

ただし、文字列の先頭にある「stop」だけを一致させたい場合

/^stop/

するでしょう:D


2
これは「途中でやめないでください」と一致します
Alex B

1
これは、stop123またはstop、とは一致しません。
lostintranslation

7

「stop」、「stop」、「stopping」など、「stop」で始まるものに一致させたい場合は、次のようにします。

^stop

「stop stop」の後に「stop going」、「stop this」、「stopped」ではなく「stopping」ではない単語を一致させるには、次のようにします。

^stop\W

0

この問題に対しては、単純な正規表現によるアプローチはお勧めしません。他の無関係な単語の部分文字列である単語が多すぎるため、すでに提供されているより単純なソリューションを過度に適応させようとすることに夢中になってしまうでしょう。

最初にテキストを処理するには、少なくとも単純なステミングアルゴリズム(Porterステマーを試してください。ほとんどの言語で利用可能な無料のコードがあります)が必要です。この処理済みテキストと前処理済みテキストを、2つの別々のスペース分割配列に保持します。アルファベット以外の各文字も、この配列で独自のインデックスを取得するようにしてください。フィルターにかけている単語のリストが何であれ、それらも阻止します。

次のステップは、ステムされた「ストップ」ワードのリストに一致する配列インデックスを見つけることです。それらを未処理の配列から削除し、スペースで再結合します。

これは少しだけ複雑ですが、アプローチの信頼性ははるかに高くなります。よりNLP指向のアプローチの価値に疑問がある場合は、重大な間違いを調査することをお勧めします。


0

単語を「stop」で開始する場合は、次のパターンを使用できます。「^ stop。*」

これは、stopで始まり、その後に何かが続く単語に一致します。


1
使っていただけません"^stop"か?
Stephen Rauch

場合によります。Java構文の観点から話をしているとき、Regexを使用するためにPatternオブジェクトとMatcherオブジェクトを使用するか、Stringオブジェクトで.matches()メソッドを直接使用できます。:彼らは、以下のように結果が異なる code String line = "stopped"; String pattern = "^stop"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); System.out.println(m.find( )); //prints true System.out.println(line.matches(pattern)); //prints false
マニーシャChaurasia

1
これは、行の先頭にある単語の場合にのみ一致します。「stop」で始まる単語が行の途中または最後にある場合、この正規表現は一致しません。@StephenRauch [az] *を省略した場合、全体として「stopping」のような単語は表示されません。「停止」の場合、「停止」が発生し、「ping」が欠落します。
Sedat Kilinc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.