1

これは私が一致させたい文字列です:

"t=0, data=00 00 00 f1 00 00 00 00". 

次の作品:

  • (@"^(t)=[0-9]+,((\s[0-9A-F-a-f]{2}){8})") 一致: "t=0, 00 00 00 f1 00 00 00 00"

  • (@"^(t)=[0-9]+,\s\w+=") 一致: "t=0, data="

以下は機能しません

  • (@"^(t)=[0-9]+,\s\w+=((\s[0-9A-F-a-f]{2}){8})") 一致しません: "t=0, data=00 00 00 f1 00 00 00 00"

これが現時点での私のコードです:

Regex rgx = new Regex(@"^(t)=[0-9]+,\s\w+=((\s[0-9A-F-a-f]{2}){8})");
if(rgx.IsMatch(line.Trim())){
  //...
}
4

4 に答える 4

1

私があなたのニーズをよく理解しているなら、あなたは次の正規表現を使うことができます:

Regex rgx = new Regex(@"(^t=[0-9]+,[a-z ]+=([A-Fa-f0-9]{2} ?){8})");
if(rgx.IsMatch(line.Trim())){
    //...
}

それで:

  • ^t=[0-9]+,[a-z ]+=16進数の前のすべてに一致します。
  • ([A-Fa-f0-9]{2} ?){8}2つの16進文字の後にスペースが続くかどうかの8つのグループに一致します。

$1囲み括弧が完全な行と一致するため、すべてが変数に含まれます。

于 2013-03-25T15:25:25.673 に答える
1

^(t)=[0-9]+,\s\w+=([0-9A-Fa-f]{2}(\s|$)){8}トリックを行います。2桁ごとに空白文字を配置しましたが、最後の2桁の後に空白がないため、正規表現は一致しません。これで、正規表現エンジンは空白文字または文字列の終わりのどちらかを選択できます。

編集:単語の境界を文字列の終わりに変更

Edit2:また、これを見てください:http: //www.regular-expressions.info/anchors.html

于 2013-03-25T15:38:57.380 に答える
0

(\ s [0-9A-Faf] {2})=記号の直後の最初の数字のペアと一致させるには、=記号と最初の数字の間にスペースを入れる必要があります。しかし、あなたはいけないようです。

また、(\ s [0-9A-Faf] {2})は正しいですか?Fとaの間の「-」を削除する必要があると思います。

于 2013-03-25T15:26:12.213 に答える
0

さて、パターンに一致させるために:

t=0, data=00 00 00 f1 00 00 00 00

私はいくつかの仮定をしました:

  • 次の桁はいくつでもかまいませんt=
  • 次の2つの16進数の8つのグループがありますdata=
  • マッチグループのデータが必要です

次に、このパターンが機能します。

^t=[0-9]++,\s*+data=(?<data>(?:[0-9a-f]{2}\s?){8})$

Javaでのテスト

public static void main(String[] args) throws SQLException {
    final String data = "t=0, data=00 00 00 f1 00 00 00 00";
    final Pattern pattern = Pattern.compile("^t=[0-9]++,\\s*+data=(?<data>(?:[0-9a-fA-F]{2}\\s?){8})$");
    final Matcher matcher = pattern.matcher(data);
    if (matcher.matches()) {
        System.out.println(matcher.group());
        System.out.println(matcher.group("data"));
    }
}

出力:

t=0, data=00 00 00 f1 00 00 00 00
00 00 00 f1 00 00 00 00
于 2013-03-25T15:27:48.310 に答える