0

SO私は次の入力文字列を持っています

OPERATION: 12, 12.32, 54.3332

OPERATION は MIN、MAX、SUM のいずれかです。正規表現は、これらの 3 つの単語のいずれかで始まり、その後にコロンが続き、その後に整数または倍精度のいずれかが続く文字列のみを受け入れる必要があります。

私はあなたたちに頼ることを決める前に、何時間もグーグルで調べたりいじったりしてきました.

御時間ありがとうございます!

編集:

これまでのところ、この正規表現で終了しました

^[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]+$

これは、「MAX:」、「MAX:」および「MA:」に一致します。「MAX: 12, 12.3323......」の形式の文字列にも一致します。

4

3 に答える 3

2
(?:MIN|MAX|SUM):[ ]+\d+(?:[.]\d+)?(?:,[ ]+\d+(?:[.]\d+)?)*

Explanation

(?:MIN|MAX|SUM) - either one of the operations, non-capturing
:             - a literal :
[ ]+          - 1 or more space characters
\d+           - 1 or more digits
(?:[.]\d+)?   - optionally a literal . followed by 1 or more digits, non-capturing
(?:,...)*     - a literal comma and another number, 0 or more times, non-capturing

[.] could also be written as \. but putting magic characters in a character class instead is a best practice, same goes for using [ ] instead of a space.

References

それが役立つことを願っています。

于 2013-05-09T11:12:54.883 に答える
2

の意味を誤解してい[]ます。これらは、1 文字の代替を参照します。

or or or ....[MAX:SUM:AVERAGE:MIN:(\\d+(\\.\\d+)?), ]のいずれかです。したがって、次のようなものも一致するはずです。MAXMMMMM

次のようなものが必要になる場合があります。

^(MAX|SUM|AVERAGE|MIN): (\\d+(\\.\\d+)?(, (?=.)|$))+$

説明:

(MAX|SUM|AVERAGE|MIN)MAXSUMAVERAGEまたはのいずれかMINです。実際の文字とスペース
": "を指します。あなたが以前持っていたものです。実際の文字とスペースを指します。先読みです。次の文字が任意の 1 文字 ( ) と一致することを確認する(したがって、文字列の末尾ではない) ため、最後に必要なものはありません。 最後にそうではないか、最後に何もないかのどちらかです。:
\\d+(\\.\\d+)?
", ",
(?=.)(?=).", "
, (?=.)|$", "

代替手段: 先読みを使用しない

^(MAX|SUM|AVERAGE|MIN): (\\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*)$

両方をテストします。

参照

于 2013-05-09T11:22:13.957 に答える
1

java.util.regex.Pattern貪欲な形式の式のグループによって形成された正規表現を受け入れます。入力文字列を分割するグループを作成できます。

OPERATION: NUM, NUM, DECIMAL, DECIMAL

あなたの正規表現は次のとおりです。

([MIN,MAX,SUM]+):([0-9]{4}.[0-9]{2}),(...),(...),(...)

そして使用:

Matcher.group()

見つかったグループを反復します。

注:数値形式は「dddd.dd」だと思いました

于 2013-05-09T11:24:33.937 に答える