含可选分组的正则捕获组编号偏移问题及Rust中取值方法问询
解决正则捕获组编号受可选组影响的问题
针对你遇到的这个问题,有两个常用的解决办法:
使用命名捕获组:给需要提取的字段对应的捕获组加上名字,这样不管中间的可选组是否匹配,都能直接通过名字获取目标值,完全避开编号混乱的问题。修改后的正则可以写成:
field_name1 (?P<field1>\d+)( facultative_field \d+)? field_name2 (?P<field2>\d+)在Rust里,你可以通过
captures.name("field2")来获取field_name2对应的值,不用再担心捕获组编号变化的问题。这也是最推荐的方案,代码可读性更高,后续维护也方便。将可选组改为非捕获组:如果不需要获取可选组里的内容,直接把可选的那部分改成非捕获组(用
?:开头),这样它就不会占用捕获组的编号。修改后的正则是:field_name1 (\d+)(?: facultative_field \d+)? field_name2 (\d+)这样field_name2对应的捕获组编号就固定是2了,不管可选组是否匹配都不会变,调用extract方法时也不会panic。
内容的提问来源于stack exchange,提问作者user10165777
相关产品推荐
相关产品推荐

