2

継続的に変化するデータ文字列でさまざまな正規表現を使用して、文字列から特定の部分を取り出そうとしています。

たとえば、以下の 2 つの正規表現はプルのみである必要がありますExample $00.00bla $00.00

data = "Maybe Example $00.00 test $00.00 bla $00.00 dasdsadasd"
pull1 = re.match(r'^(Example) (\D\w+\D\w+)', data)
pull2 = re.match(r'^(bla) (\D\w+\D\w+)', data)

私が間違っていることを知っている人はいますか?

前もって感謝します-Hyflex

4

5 に答える 5

5

部分的な文字列を抽出したい場合は、「一致」の代わりに「検索」を使用してください。このコードは正常に動作します:

data = "Maybe Example $00.00 test $00.00 bla $00.00 dasdsadasd"
pull1 = re.search(r'(Example) (\D\w+\D\w+)', data)
pull2 = re.search(r'(bla) (\D\w+\D\w+)', data)

print pull1.group(0)
print pull2.group(0)

正規表現から「^」を削除しました。

幸運を!

于 2013-09-27T02:00:02.540 に答える
3

match()一致を文字列の先頭から開始するように制約します (ドキュメントを参照)。search()代わりに欲しい。^また、正規表現の先頭でも必要ありません。これにより、一致が文字列の先頭から開始されること強制されます。文字列の先頭からパターンを一致させることはできませんdata

于 2013-09-27T01:58:05.460 に答える
3

試す:\b((Example|bla)\s\$(\d{2})\.\3)\b

  • \b- 単語境界の開始
  • (- マッチ #1 を開始
  • (Example|bla)- マッチ #2
  • \s- スペース
  • \$- ドル記号
  • (\d{2})- マッチ #3: 2 桁
  • \.- 小数点以下の桁数
  • \3- マッチ #3 を繰り返す
  • )- エンドマッチ #1
  • \b- エンドワード境界

実際に見てみましょう: RegexPal

于 2013-09-27T01:59:24.410 に答える
3

re.match() は、文字列の先頭にあるパターンに一致します。文字列のどこでもパターンを認識させたい場合は、match() の代わりに search() を使用してください。また、検索で ' ^ ' を使用すると、文字列の先頭に限定されます。

あなたの例では、文字列の先頭にある 'Example' と一致させようとしていますが、見つからないため None を返します。詳しくはこちらをチェック!

于 2013-09-27T02:05:18.007 に答える
2

'^' は、改行または文字列の先頭 (1_CR で指摘) で開始することを示します。したがって、これが存在する限り、これは何にも一致しません。

いずれにしても、findall を使用して、後で不要な「テスト」値を解析します。

re.findall(r'(.*?)\s(\$.*?)\s', data)

戻ります

[('Maybe Example', '$00.00'), ('test', '$00.00'), ('bla', '$00.00')]
于 2013-09-27T02:04:00.513 に答える