常用分组语法
分类 | 代码/语法 | 说明 |
捕获 |
(exp) |
匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
(?:exp) |
匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
零宽断言 |
(?=exp) |
匹配exp前面的位置 |
(?<=exp) |
匹配exp后面的位置 |
(?!exp) |
匹配后面跟的不是exp的位置 |
(?<!exp) |
匹配前面不是exp的位置 |
注释 |
(?#comment) |
这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
//提取payaccno中间的账号
string input = @"
<payaccno>6227000000000000001</payaccno>
<payaccname>张三</payaccname>
<payaccno>6227000000000000002</payaccno>
<payaccname>李四</payaccname>
";
Regex reg = new Regex(@"(?<=<payaccno>)(d+)(?=</payaccno>)+");
var matches = reg.Matches(input);
string result = "";
foreach (var m in matches)
{
result += m + ",";
}
result = result.TrimEnd(',');
//结果:6227007201840000001,6227007201840000002