匹配正则表达式中的字符串

时间:2013-03-25 15:17:56

标签: c# regex

这是我要匹配的字符串:

"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 个答案:

答案 0 :(得分: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 ]+=匹配十六进制数字之前的所有内容。
  • ([A-Fa-f0-9]{2} ?){8}匹配8个2个十六进制字符组,后跟或不跟空格。

所有内容都包含在$1变量中,因为封闭括号与整行匹配。

答案 1 :(得分:1)

^(t)=[0-9]+,\s\w+=([0-9A-Fa-f]{2}(\s|$)){8}会做到这一点。 你在每两个数字后面放了一个空白字符,但因为后两个数字后面没有空格,所以正则表达式不匹配。现在,正则表达式引擎可以在空白字符或字符串结尾之间进行选择。

编辑:将字边界更改为字符串结尾

Edit2:另外,请看一下:http://www.regular-expressions.info/anchors.html

答案 2 :(得分:0)

对于(\ s [0-9A-F-a-f] {2})匹配=符号后面的第一对数字,你需要在=符号和第一个数字之间留一个空格。但似乎你没有。

也是(\ s [0-9A-F-a-f] {2})正确吗?我想你需要删除F和a之间的' - '。

答案 3 :(得分:0)

好的,要匹配模式:

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

我做了一些假设:

  • t=
  • 后面可以有任意位数
  • data=
  • 后面有8组两个十六进制数字
  • 您需要匹配组中的数据

然后这种模式将起作用:

^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