私はこのようになります。文字列のセット持っている:私は引っ張ってくる正規表現を記述しようとしているゴルディロックスの正規表現パターンを必要とする - あまりにも利己的な、あまりにも貪欲とないではない
lines_ = ["04/04 1,000.00 Some word132:11bdkljas 14235262634235",
"04/04 500.00 A simpler phrase 19058453049854",
"04/04 1,000,000.00 Apply//erklj//1324:123"]
を文字列の最初の3つの "要素"。私はこの例に基づいて、単にre.split("\s{2,}")
を使用して最初の3つの要素を取得することができますが、入力には常に2つ以上のスペースが必要であることを保証できません。だから私はむしろそれをつかむためのより堅牢な正規表現を持っています。
私はこれを使用してみました:数字のないセットがありませんので、最初の2つの要素のために動作しますが、第三ない
r"(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+)(\s+\d+)"
。それでは、私はこれにそれを微調整:
r"(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+)(\s+\d+)?"
これが三つ目のために動作しますが、最初の2のために、第3の要素の一部として、その4番目の要素を含んでいます。それでは、私はこのように見て、それをさらに微調整:
r"(\d{2}/\d{2})\s+([\d,]+\.\d\d)\s+(.+?)(\s+\d+)?"
(.+)
の内部?
が、それはあまり貪欲にし、最後の要素を飲み込んでいないだろうと考えます。代わりに、それは私に3番目の要素の最初の単語の最初の文字を与え、それはそれです。私はで終わるしたい何
は以下のように出力されます。
groups_ = [("04/04", "1,000.00", "Some word132:11bdkljas"),
("04/04", "500.00", "A simpler phrase"),
("04/04", "1,000,000.00", "Apply//erklj//1324:123")]
私は私の正規表現に欠けているものに何かアドバイスをいただければ幸いです。
興味深いです。私はこのアプローチを試してみましたが(カンマと小数の桁で少し違いましたが)、ここで見たように3番目の要素は見つかりませんでした(https://regex101.com/r/hL9nJ7/1)。 – brittenb