1

文字列から値を取得しようとしています。文字列のフォーマットは

01+XXXX

正規表現を使用して XXXX をキャプチャしたい。これは私が思いついたものです -

01+\\s*(?<1>[.0-9]*)

しかし、それはうまくいきません。何が機能するかは -

01+\\s*(?<1>[+.0-9]*)

唯一の違いは、 + を文字クラスに追加することです。私の主な質問は、なぜ 2 番目の式が機能し、最初の式が機能しないのですか? 最初のものでは、01+ を探し、残りは [.0-9] に移動する必要があります。2番目のものは+を2回読みたいようです-それはそれがしていることではありませんか? 私は正規表現にかなり慣れていないので、小さな何かが欠けているように感じます。

このサイトhttp://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorialでは、 + は「1回以上繰り返す」ために使用されると書かれています。それで、01+を複数回読み取ろうとしていますか?

4

5 に答える 5

6

11回以上読んでいます。つまり、正規表現はor or etcに01+一致します。010110111

しかし、それは一致しません+。リテラルに一致させたい場合は、正規表現にorを+記述します。01\+01[+]

于 2012-07-18T17:46:50.653 に答える
5

+特殊文字で、「1 回以上」を意味します。この場合、ではなく010110111などを意味し01+ます。文字どおりに使用したい場合は、次のようにエスケープする必要があります。\+

注:文字列で使用しているように見えるため、ダブルエスケープする必要があります:\\+

これは文字クラス ( ) 内で機能します。これは、[+]文字クラスがほとんどの文字を文字どおりに受け取るためです。\]

于 2012-07-18T17:47:30.953 に答える
3

「+」は正規表現の特殊文字で、「1 回以上」を意味します。したがって、あなたが書いたことは次のことを意味します。

  • 文字「0」
  • 文字「1」が1 回以上
  • 空白 0 回以上

リテラル プラスに一致させたい場合は、エスケープする必要があります。

01\+\\s*(?<1>[.0-9]*)
于 2012-07-18T17:48:19.080 に答える
1

リンクしたチュートリアルで説明されているように、 はquantifier+ですしたがって、正規表現は「ゼロに一致し、次に1つ以上の空白に一致し、次にゼロまたは複数の空白に一致し、次に...」を意味します。

プラスはエスケープする必要があります。

01\\+\\s*(?<1>[.0-9]*)

+ は文字クラスの一部であり、そこでエスケープする必要がないため、2番目の正規表現は機能しました。

于 2012-07-18T17:48:49.737 に答える
0
01\+(?<cap>[\d.]*)

説明:

01                       '01'

\+                       '+'

[\d.]*                   any character of: digits (0-9), '.' 
                         (0 or more times, matching the most amount possible)
于 2012-07-18T17:54:34.063 に答える