2017-08-29 4 views
0

私はregexの概念には新しくないが、時にはすべての構文と意味が混乱する。私はグループ化単語と小数点の間にスペースを入れたグループを作る

Ambient Relative Humidity (Group 1) 

31.59 (Group 2) 

Ambient Relative Humidity: 31.59 

を認識するためにパターンを作成しようとしている。しかし、私はまた

をグループ化して

Operator: Bob 

のようなものにマッチできるようにする必要があります

Operator (Group 1) 

Bob (Group 2) 

又はグルーピングここ

Sensor Number (Group 1) 

0001 (Group 2) 

オペレータとセンサ番号を含む実施例のために働くが、最初の例と一致していない私が作成した電流パターンである(周囲湿度)

Sensor Number: 0001 

私は何も考えず、あまりにもすぐに掲載している可能性があり
\s*([A-Za-z0-9]*\s*?[A-Za-z0-9]*)\s*:\s*([A-Za-z0-9]*) 

答えて

2

余分なスペースキー部分を正規表現に追加する必要があります。
また、値に10進数のオプションを追加する必要があります。この([A-Za-z0-9]*(?:\s*[A-Za-z0-9]+)*)\s*:\s*((?:\d+(?:\.\d*)?|\.\d+)|[A-Za-z0-9]+)?

https://regex101.com/r/fl0wtb/1

よう

何かが

(       # (1 start), Key 
     [A-Za-z0-9]* 
     (?: \s* [A-Za-z0-9]+)* 
)        # (1 end) 
\s* : \s* 
(       # (2 start), Value 
     (?:       # Decimal number 
      \d+ 
      (?: \. \d*)? 
     | \. \d+ 
    ) 
    |        # or, 
     [A-Za-z0-9]+     # Alpha num's 
)?       # (2 end) 
1

、私は今、次の式

を持っています
\s*([A-Za-z0-9]*\s*[A-Za-z0-9]*\s*[A-Za-z0-9]*)\s*:\s*([A-Za-z0-9.]*) 

唯一のことは、時には私が避けようとしていたスペースが含まれていることですが、後でトリミングすることもできます。すみません、すみません。

0
var st = "Ambient Relative Humidity: 31.59 Operator: Bob Sensor Number: 0001"; 
var li = Regex.Matches(st, @"([\w]+?:)\s+(\d+\.?\d+|\w+)").Cast<Match>().ToList(); 

    foreach (var t in li) 
    { 
     Console.WriteLine($"Group 1 {t.Groups[1]}"); 
     Console.WriteLine($"Group 2 {t.Groups[2]}"); 
    } 

    //Group 1 Humidity: 
    //Group 2 31.59 
    //Group 1 Operator: 
    //Group 2 Bob 
    //Group 1 Number: 
    //Group 2 0001 
について説明しました
関連する問題