C#怎么获取正则表达式分组的组索引

hy63171234 2011-12-01 03:02:26
            Regex r1 = new Regex("^([RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK])([a-h][1-8])$");//RNBQK正常走子不将军
Regex r2 = new Regex("^([a-h][1-8])$");//P正常走不将军
Regex r3 = new Regex("^([RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK]|[a-h])(x)([RNBQK][a-h][1-8]|[a-h][1-8])$");//RNBQKP正常走吃子不将军
Regex r4 = new Regex("^([RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK])([a-h][1-8])(\\+)$");//RNBQK正常走子不吃子将军
Regex r5 = new Regex("^([a-h][1-8])(\\+)$");//兵P正常走子不吃子将军
Regex r6 = new Regex("^([RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK]|[a-h])(x)([RNBQK][a-h][1-8]|[a-h][1-8])(\\+)$");//RNBQKP吃子将军
Regex r7 = new Regex("^(O-O-O)|(O-O)$");//王车易位
Regex r8 = new Regex("^([a-h][1-8])(=)([RNBQK])$");//兵正常走不吃子升变
Regex r9 = new Regex("^([a-h][1-8])(x)([RNBQK][a-h][1-8]|[a-h][1-8])(=)([RNBQK])$");//兵正常走吃子升变
Regex r10 = new Regex("^([a-h][1-8])(=)([RNBQK])(\\+)$");//兵正常走不吃子升变将军
Regex r11 = new Regex("^([a-h][1-8])(x)([RNBQK][a-h][1-8]|[a-h][1-8])(=)([RNBQK])(\\+)$");//兵正常走吃子升变将军


这是为了检索国际象棋PGN棋谱,现在检索完,我需要对PGN棋谱分析,怎么能获取正则表达式分组的索引,
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy63171234 2011-12-01
  • 打赏
  • 举报
回复
在一个能根据捕获的字符串反过来判断是哪个组的正则检索到么
遥望那些年 2011-12-01
  • 打赏
  • 举报
回复
(?<part1>(?<part2>[RNBQK])(?<part3>[a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK]))
hy63171234 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q107770540 的回复:]
看了一下你的所有正则都没有使用命名捕获组
捕获组的索引是从0开始的
Group[0]表示匹配到的所有值
Group[1]表示表达式中从左向右,第一个()内的匹配值
如:
Regex r8 = new Regex("^([a-h][1-8])(=)([RNBQK])$");//兵正常走不吃子升变
Group[0]的值就是整个表达式匹配到的值
Group[1]的值就是([a-h][1……
[/Quote]
Regex r1 = new Regex("^(?<part1>[RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK])(?<part2>[a-h][1-8])$");[

(?<part1>[RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK])
比如这部分我还可以在进行小的分组么?
想得到确切是哪个集合里的值
hy63171234 2011-12-01
  • 打赏
  • 举报
回复
Regex r1 = new Regex("^(?<part1>[RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK])(?<part2>[a-h][1-8])$");

——————————————————————————————————————————
(?<part1>[RNBQK][a-h][1-8]|[RNBQK][a-h]|[RNBQK][1-8]|[RNBQK])
比如这部分我还可以在进行小的分组么?
想得到确切是哪个集合里的值
q107770540 2011-12-01
  • 打赏
  • 举报
回复
看了一下你的所有正则都没有使用命名捕获组
捕获组的索引是从0开始的
Group[0]表示匹配到的所有值
Group[1]表示表达式中从左向右,第一个()内的匹配值
如:
Regex r8 = new Regex("^([a-h][1-8])(=)([RNBQK])$");//兵正常走不吃子升变
Group[0]的值就是整个表达式匹配到的值
Group[1]的值就是([a-h][1-8])匹配到的值
Group[2]的值就是(=)匹配到的值 也就是=
Group[3]的值就是([RNBQK])匹配到的值
遥望那些年 2011-12-01
  • 打赏
  • 举报
回复
从左往右,第一个括号里的内容索引是1,之后类推

可以给分组命名

(?<name1>[RNBQK])

这样直接 Group["name1"]就可以取值了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧