为何正则分组1丢失首数字?如何获取完整目标字符串?
问题分析与解决
嘿,这事儿很好解释,咱们一步步来捋:
为什么丢失了首数字6?
你的正则表达式[\d](.*)$里,[\d]是单独匹配字符串里的第一个数字(也就是6),但这部分并没有被包含在分组1的括号(.*)里。分组1只捕获了.*匹配到的内容——也就是从第一个数字之后的位置开始,到行尾的所有字符,所以自然就丢掉了开头的6,只拿到了920 BIRDWOOD AVENUE, MIDDLE RIVER, MD 21220。
怎么让分组1获取完整内容?
只需要把开头的数字也包含进分组1的括号里就行,最简单的修正方式是调整正则为:
Regex rg = new Regex(@"(\d.*)$", RegexOptions.Multiline); var matchResult = rg.Match("6920 BIRDWOOD AVENUE, MIDDLE RIVER, MD 21220"); matchResult.Groups[1].Value.Dump();
这个正则里:
\d匹配开头的第一个数字6.*匹配从这个数字之后到行尾的所有内容- 整个
\d.*被括号包裹成分组1,这样分组1就会捕获从第一个数字开始的完整目标内容:6920 BIRDWOOD AVENUE, MIDDLE RIVER, MD 21220
如果你想保留原来的结构(比如需要单独捕获数字后的部分),也可以用嵌套分组:(\d(.*))$,这时候分组1是完整内容,分组2是去掉首数字的部分,但显然第一种方式更简洁直接。
内容的提问来源于stack exchange,提问作者KARAN
相关产品推荐
相关产品推荐

