2017-01-19 13 views
-3

私はこのパターンがpであり、このパターンを使用して一致するものがあるかどうかを調べる必要があります。これはPythonで書かれています。regex matching parsing

p = "keyword" + ".*?(\d+(\.\d+)?[\s%]?[\w/]*)" found = re.findall(p, some_text)

私は、この正規表現の構文解析に問題があります。

  1. 最初の "?"とは何ですか?

    "。*"は0回以上のものにマッチすることを理解します。しかし、 "?"ここにあります。

  2. ネストされたキャプチャグループの括弧を見ると変です。それは何をするためのものか?

  3. 「?」とは何ですか?正規表現で[\s%]?で?私はこれが "%"に続く空白にマッチしていると仮定します。しかし、 "?"ここにあります。

  4. [\w/]*正規表現のアスタリスクは何ですか?私はこれがスラッシュの後ろに続く任意の単語の文字にマッチしていると仮定します。しかし、 "*"が何をしているのかは分かりません。

+1

[参照 - この正規表現は何を意味しますか?](http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean) – MYGz

答えて

2
.*?(\d+(\.\d+)?[\s%]?[\w/]*) 
  1. .*?マッチ(行末を除く)任意の文字 *?数量詞 - 必要に応じて拡大可能な限り数回限りゼロと無限の時間の間のマッチ、(怠け者)
  2. 第一キャプチャグループ(\d+(\.\d+)?[\s%]?[\w/]*)
  3. \d+は、数字に一致します([0-9]に等しくなります)。Quantifier - 1回と無制限の回数の間で、possibと一致します欲しいものを返す(欲張り)
  4. 第2捕獲集団
  5. \.と一致します。文字通り(大文字と小文字を区別)
  6. [\s%]?一致\r又は\n又は\t又は\f又は\v
  7. %中に存在する単一の文字(大文字と小文字を区別)
  8. [\w/]*、文字通り文字%と一致する場合\w一致存在する単一文字で
  9. /a-zA-Z0-9_文字/文字通り(大文字と小文字を区別)
と一致します

正規表現をhereに配置し、サイトの右上に分析を表示できます。

+0

ありがとうございます。私はもう少し質問があります。 10. '[\ s%]?' ---- "?"ここでやる? 11. '[\ w/\] *' ---- "*"はここで何をしますか? 12.この正規表現は主に私の目的のために働いています。しかし、私はまた、 "KeyA:5555 \ n KeyB:"のようなテキストから数字を抽出する必要があります。この場合、5555という数字を抽出したいが、この正規表現は "5555 \ n KeyB"を抽出する。あなたは修正を行う方法を知っていますか? %とスラッシュ(正規表現からは削除できない)などのものと一致する必要があることに注意してください。 – sh0731