在Regex中重叠匹配我似乎无法找到这个问题的答案,我想知道是否存在。简化示例:考虑一个字符串“nnnn”,其中我想找到“nn”的所有匹配 - 但也是那些彼此重叠的匹配。因此正则表达式将提供以下3个匹配:nn nnñ NN ñnn nn我意识到这并不是正则表达式的意思,但是对字符串进行操作并手动解析它似乎是一个非常多的代码,考虑到实际上匹配必须使用模式而不是文字字符串来完成。
3 回答
SMILET
TA贡献1796条经验 获得超4个赞
使用具有捕获组的前瞻工作,代价是使正则表达式更慢,更复杂。另一种解决方案是告诉Regex.Match()方法,下一次匹配尝试应该从哪里开始。试试这个:
Regex regexObj = new Regex("nn");Match matchObj = regexObj.Match(subjectString);while (matchObj.Success) { matchObj = regexObj.Match(subjectString, matchObj.Index + 1); }
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
AFAIK,没有纯正的正则表达方式一次做到这一点(即返回你请求的三个捕获没有循环)。
现在,您可以找到一次模式,并以offset(找到位置+ 1)开始循环搜索。应该将正则表达式与简单代码结合使用。
[编辑]太棒了,当我基本上说Jan所示的时候,我被投票了...
[编辑2]要明确:Jan的答案更好。不是更精确,但肯定更详细,值得选择。我只是不明白为什么我的被投票,因为我仍然没有看到任何错误。没什么大不了的,只是讨厌。
- 3 回答
- 0 关注
- 764 浏览
添加回答
举报
0/150
提交
取消