0

以下の文字列ですべての '2' を検索したい:

2, 10,11,1,1, 22,1,12,1,1, 1,2 , 2  ,2

私は正規表現を与えました:

(^\s*(2)\s*)|(\s*,\s*(2)\s*(,|$))

ただし、最後でなく 1 つ 2 を検索します。


正規表現を次のように変更しました。

(^\s*(2)\s*)|(\s*,\s*(2)\s*)

しかし、今では22 の 2 のうちの 1 つが必要になります。


すべての 2を見つけるように正規表現を変更するにはどうすればよいですか(22 または 12 は考慮しないでください)。

4

3 に答える 3

1

2これは、入力文字列のすべてのスタンドアロンに一致します。

(?<!\d)2(?!\d)

上記の正規表現は、常に同じ数の一致があるため、次の正規表現と同等であり、この正規表現のキャプチャ グループ 1 の内容は、他の正規表現によって一致した内容と同じです。

(?:^|\D)(2)(?:\D|$)

上記の(両方の)正規表現は、入力の形式を気にしないことに注意してください。次の場合でも、スタンドアロンの 2 を抽出するだけです。

2 plain text, 2,43_2,lkjsf
^             ^    ^

列を value と一致させ、 or2を無視2する2 2場合abc 2:

(?:^|,) *(2) *(?=,|$)

2これは、このサンプル テキストの のみに一致します。

2 plain text, 2 ,2, 43_2, 2 2,2   ,234,2
              ^  ^            ^        ^
于 2014-10-15T05:22:38.337 に答える
1

否定後読みと否定先読みを使用します。

(?<!\d)2(?!\d)

デモ

>>> import re
>>> s = "2, 10,11,1,1, 22,1,12,1,1, 1,2 , 2  ,2"
>>> re.findall(r'(?<!\d)2(?!\d)', s)
['2', '2', '2', '2']

説明:

  • (?<!\d)22後読みは、 の前に数字ではなく任意の文字が続くことをアサートします。
  • 2(?!\d)2 の後に任意の数字が続く必要があることをアサートします。
于 2014-10-15T05:17:43.450 に答える
0

これがあなたが探しているものであることを願っています

 [^\d]2[^\d]

http://regex101.com/r/nD6nZ9/1

Pythonコードは次のようなものでなければなりません

p = re.compile(ur'[^\d]2[^\d]', re.MULTILINE)
于 2014-10-15T05:14:51.927 に答える