4

私はPythonを使用して、正規表現で文字列を調べて物事を見つける簡単なコードを書き込もうとしています。この文字列では:

and the next nothing is 44827

正規表現が数字だけを返すようにします。

次のようにPythonプログラムをセットアップしました。

buf = "and the next nothing is 44827"
number = re.search("[0-9]*", buf)
print buf
print number.group()

number.group() が返すのは空の文字列です。ただし、正規表現が次の場合:

number = re.search("[0-9]+", buf)

完全な数 (44827) が適切に抽出されます。ここで何が欠けていますか?

4

4 に答える 4

8

問題は、 が[0-9]*0 個以上の数字に一致することです。そのため、長さが 0 の文字列に一致することは非常に喜ばしいことです。

一方、 は[0-9]+1 つ以上の数字に一致するため、キャッチするには少なくとも 1 つの数字を確認する必要があります。


findall1行に複数の数字がある場合を使用して処理したい場合があります。

于 2012-04-10T02:37:00.470 に答える
4

これは、最初の試行が空の文字列に一致するためです-「0桁以上」を要求しているため、最初の一致は文字列の先頭が空です。「1 つ以上の数字」を尋ねると、最初の一致は最初の「4」から始まり、そこから数字の終わりまで続きます。

于 2012-04-10T02:37:28.763 に答える
4

最初の正規表現は、文字「a」の前の空の文字列と一致するため、そこで停止します。あなたの2番目はそうではないので、試行を続けます。

于 2012-04-10T02:36:50.613 に答える
3

自分で見て。

ヒント:

  • *0回以上一致
  • +1回以上一致

明らかに、最初のケースは 2 番目のケースよりも優先されます。また、正規表現エンジンには何の問題もありません。何にも一致しません。:-)

于 2012-04-10T02:38:08.770 に答える