这是我要匹配的字符串:
"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())){
//...
}
答案 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=
然后这种模式将起作用:
^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