私はこのような文字列に一致するようにしようとしている:62.00|LQ+2*2,FP,MD*3 "Description"
小数点以下の値は2桁のオプションである場合は、各ユーザーは、二つの文字数を特徴とし、それを続けることができます
(\ + [\ D] +)?または(\ * [\ D] +)?またはnone、またはその両方、またはその両方異なる順序で
お気に入り:
LQ * 2 + 4 | LQ + 4 * 2 | LQ * 2 | LQ + 8 | LQ
説明もオプションです
どのような私が試したことはこれです:
Pattern.compile("^(?<number>[\\d]+(\\.[\\d]{2})?)\\|(?<users>([A-Z]{2}){1}(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?))((,[A-Z]{2})(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?)))*)(\\s\\\"(?<message>.+)\\\")?$");
私は私がit.Theのうちグラブ何かからの出力を希望することはできません「」私はしてそれらを分割することができますので、すべてのユーザーを取得する必要があり、その後、さらにit.Butに私の方法はRegex
62.00 | LQ + 2 * 2、FP、MD * 3 "説明"
次のようになります。
62.00
LQ + 2 * 2、FP、MD * 3
説明
受け入れられた入力は、これらの種類のものでなければなりません。
62.00 | LQ + 2 * 2、FP、MD * 3
30 | LQ "バーガー"
35.15 | LQ * 2、FP + 2 * 4、MD * 3 + 4 "じゃがいも"
35.15 | LQ、FP、MD
あなたが説明した入力に一致するように、正確な正規表現は、この正規表現によって満たされるべき、
^(\d+(?:\.\d{1,2})?)\|([a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?(?:,[a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?)*)(?: +(.+))?$
GROUP1はコンマを持っています2桁とグループ2点で最大オプションの小数点以下を持つことができます番号が含まれていますどこにオプションの説明存在する場合が含まれていますあなたのポストとGROUP3で説明したように、入力を分離しました。
正規表現の説明:
^
- 文字列のスタート(\d+(?:\.\d{1,2})?)
- 小数点およびグループ1でキャプチャをした後に、オプションの2桁を持つことができる番号を照合します\|
-リテラルマッチ|
数の後に、あなたの入力に存在します([a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?(?:,[a-zA-Z]{2}(?:(?:\+\d+(?:\*\d+)?)|(?:\*\d+(?:\+\d+)?))?)*)
-この部分は、二つの文字が任意の組み合わせに続く一致する+
数字が続くと、任意選択した*
番号に続くOR*
数字が続くと、任意選択した+
正確回または全体それのはオプションでグループ2にキャプチャしてある数字が続きます(?: +(.+))?
- これはオプションの説明とGROUP3でキャプチャそれと一致しました$
- 入力のマークの終わり