const string numericReg = "\\d+"; // Matches a digit character. Equivalent to [0-9].
const string realNumsReg = numericReg + b + "(\\." + b + numericReg + ")?";
const string b = "\\s*";
这句话是真的:
private const string rte = "(?<rate>" + realNumsReg + ")" +
"(?=(?<rte1>" + b + "qs " + "))";
和
这句话是真的:
private const string barl = "(?<barl>" + numericReg + ")" +
"(?=((?<q>" + b + "point to print )))";
这对rte来说是正确的:
MatchCollection s = Regex.Matches
("3000 qs / min", rte , RegexOptions.IgnoreCase);
对于barl来说这是真的:
MatchCollection s = Regex.Matches
("6 point to print ", barl , RegexOptions.IgnoreCase);
为什么这是错的?
MatchCollection s = Regex.Matches
("6 point to print 3000 qs/ min", barl+b+rte , RegexOptions.IgnoreCase);
答案 0 :(得分:0)
第一个问题: 3,000中的逗号(',')。 第一个匹配匹配“000 rds” 在第三个Regex.Matches中没有任何东西可以匹配“3”。
第二个(不太明显的问题):
两个前瞻断言(?= 表达式),断言不匹配,所以没有任何内容匹配第三个正则表达式中第一个断言内的内容。
在你的情况下:'barl'+'b'+'rte'
'barl'匹配'每个安装6个桶'中的'6','b'匹配'6'和'桶'之间的空间('每个安装桶'由先行但未匹配确定)并且'rte'不能匹配后跟'rds'的数字。
只需从表达式中删除您并不真正需要它们的逗号和前瞻,因为您感兴趣的组无论如何都会被命名,并且可以从匹配中的Groups集合中轻松获取它们匹配的内容。
改进: