私はこの行のために正規表現を記述しようとしています:グループは、私が試してみましたこの例ではregularexpressionの使用方法は?
単一のグループ(-5.0、-4.0 ...)で記号で浮くことができることを
- 5.0 - 4.0 - 3.0 ... + 12.0
:
\s*([+](?:\s)*\d*[.])
しかし、どうやらそれはキャプチャグループ内の非キャプチャグループを無視しません。 これがどのように解決できるかについてのご意見はありますか?ここで
私はこの行のために正規表現を記述しようとしています:グループは、私が試してみましたこの例ではregularexpressionの使用方法は?
単一のグループ(-5.0、-4.0 ...)で記号で浮くことができることを
- 5.0 - 4.0 - 3.0 ... + 12.0
:
\s*([+](?:\s)*\d*[.])
しかし、どうやらそれはキャプチャグループ内の非キャプチャグループを無視しません。 これがどのように解決できるかについてのご意見はありますか?ここで
あなたのキャプチャグループには、以下の要素があります。
[+]
は、空白文字の任意の数の\d*
は数字+
(?:\s)*
試合に一致します [.]
は、リテラルに一致します.
これは、プラス記号とスペースのあとに数字とそれに続く小数点が続くものです。しかし、 sign-space-digits-decimalpoint-digitのシーケンスを同じ符合にしている限り、行内に一致させたいと思うようです。このような単一のシーケンスと一致する式で
スタート:
[+-]\s*\d+[.]\d+
これはスペース、その後、プラスまたはマイナスに一致するが、その後、数字、小数点、桁私はこのようなことを行うだろう。
パターンを保存して、残りのパターンが同じ記号のシーケンスと一致することを確認します。だからキャプチャグループを作ってください。
([+-])\s*\d+[.]\d+
今の私たちは、符号が同じであることを確認したいので、我々は後方参照を使用することを除いて、他のグループと一致する(一部の間にスペースを持つ)パターンを繰り返してみましょう。この場合、グループ番号1を捕捉することによりマッチしたものは何でも
([+-])\s*\d+[.]\d+\s*\1\s*\d+[.]\d+
\1
マッチ、すなわち符号、+
又は-
です。このパターンは、同じ符号を持つ2つの連続するシーケンスと一致します。
パターンの2番目の部分を0個以上の追加シーケンスと一致するように変更します。
([+-])\s*\d+[.]\d+(?:\s*\1\s*\d+[.]\d+)*
search
関数、またはmatch
ではなくfindall
関数を賢明に使用して解決できます。引数なしのmatch_object.group()
を使用して、一致したシーケンスを取得することができます。これは必要なものです。はあなたが試すことができるものです。
(\+|-)\s*(\d+\.\d+)\s*
ますが、常に末尾のコンマを持つことになりますので、あなたはそれを削除する必要があると思います。あなたの条件によると
:
グループが使用して単一のグループ(-5.0、-4.0 ...)溶液中の記号で浮くことができることを
re.findall()
機能:s = '- 5.0 - 4.0 - 3.0 ... + 12.0' signed_floats = [re.sub(r'\s+', r'', f) for f in re.findall(r'-\s*\d+\.\d+\b', s)] print(signed_floats)
出力:
['-5.0', '-4.0', '-3.0']
問題の詳細については、もっと良い方法があります。入力データは文字列ですか?あなたはどこから入力を得ていますか?別の形式でフォーマットすることができれば、データを扱いやすくなります。また、たくさんのデータ行をテストする本当に簡単な方法が必要な場合は、このサイトに試してみてください。 http://pythex.org/ –