7

定義された文字のみを含む単語全体 (または実際には文字列) に一致させたい。

たとえば、文字がd, o,の場合g:

dog = match
god = match
ogd = match
dogs = no match (because the string also has an "s" which is not defined)
gods = no match
doog = match
gd = match

この文では:

dog god ogd, dogs o

dog... 、god、および で一致すると予想されます (コンマやによるものではありoません)ogd,dogss

4

4 に答える 4

15

これはあなたのために働くはずです

\b[dog]+\b(?![,])

説明

r"""
\b        # Assert position at a word boundary
[dog]     # Match a single character present in the list “dog”
   +         # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\b        # Assert position at a word boundary
(?!       # Assert that it is impossible to match the regex below starting at this position (negative lookahead)
   [,]       # Match the character “,”
)
"""
于 2012-05-23T03:56:38.617 に答える
5

次の正規表現は、探している 3 つの文字が 1 つ以上出現することを表します。

[dog]+

説明:

角括弧は、「囲まれた文字のいずれか」を意味します。

プラス記号は、 「前の式が 1 回以上出現する」ことを意味します。

これはまったく同じことです:

[ogd]+
于 2012-05-23T03:52:58.173 に答える
3

どの正規表現フレーバー/ツールを使用していますか? (JavaScript、.NET、Notepad++ など) 先読みと後読みをサポートしている場合は、次のようにします。

(?<!\S)[dog]+(?!\S)

このようにして、文字列の先頭または空白が先行するか、文字列の末尾または空白が後続する一致のみを取得します。後読みを使用できない場合 (たとえば、JavaScript を使用している場合) は、先頭の条件を綴ることができます。

(?:^|\s)([dog]+)(?!\S)

この場合、一致した単語をグループ #1 から取得します。ただし、次のステップに進んで先読みを に置き換えようとしないでください(?:$|\s)。これを行うと、最初のヒット ("dog") が末尾のスペースを消費し、正規表現はそれを使用して次の単語 ("god") に一致させることができなくなります。

于 2012-05-23T04:41:29.570 に答える
2

言語によっては、これで必要なことを行う必要があります。上記の内容にのみ一致します。

この正規表現:

[dog]+(?![\w,])

..の文字列で

dog god ogd, dogs o

のみ一致します..

dog, god, and o

JavaScript での例

PHPでの例

2 つの[](括弧) の間はすべて文字クラスです。括弧の間の任意の文字に一致します。[0-9]、などの範囲も使用できますが[a-z]、一致するのは 1 文字のみです。およびは量指定子です。 は1 つ以上の文字を検索し+、は 0 個以上の文字を検索します。数字または複数の数字を間に入れて、中かっこ ( ) で明示的な文字範囲を指定できます。は 2 文字のみに一致しますが、 1 または 3 に一致します。*+*{}{2}{1,3}

括弧で囲まれたもの()はすべてコールバックに使用できます。たとえば、文字列の置換として返された値を返すか、使用する必要があります。?! は否定先読みであり、文字が存在する場合に文字列と文字が一致しないようにするために、その後の文字クラスとは一致しません。

于 2012-05-23T03:53:28.890 に答える