C# 捕获Regex Match.NET周围的文本

C# 捕获Regex Match.NET周围的文本,c#,.net,regex,C#,.net,Regex,我正在构建一个应用程序,我需要在匹配之前和之后捕获角色。这似乎可以正常工作,除非在周围的捕获中有多个匹配项 正则表达式: .{0,10}(?=abc) 在找到字符串“abc”之前,最多应捕获10个字符 如果前面的文本中再次出现匹配,则会出现问题: "qqqqabcabcqqq" 在上面的文本中,我希望有两个捕获: qqqq (the 4 characters before the first abc occurrence) qqqqabc (the 7 characters before t

我正在构建一个应用程序,我需要在匹配之前和之后捕获角色。这似乎可以正常工作,除非在周围的捕获中有多个匹配项

正则表达式:

.{0,10}(?=abc)
在找到字符串“abc”之前,最多应捕获10个字符

如果前面的文本中再次出现匹配,则会出现问题:

"qqqqabcabcqqq"
在上面的文本中,我希望有两个捕获:

qqqq (the 4 characters before the first abc occurrence)
qqqqabc (the 7 characters before the second abc occurrence)
然而,我没有得到这些比赛。我得到的唯一匹配项是:

qqqqabc
我肯定我错过了什么,但我不确定是什么。我相信我的正则表达式有点太贪婪了,所以它忽略了第一场比赛,而选择了第二场更大的比赛。以下是我需要的:

我需要一个正则表达式:

1.用于.NET

2.在字符串中查找X个字符,然后再查找与字符串S完全匹配的字符

3.包括S(调用S')上在S之前X个字符内找到的任何辅助匹配

4.一点也不在乎这些角色是什么

我向你们保证,我试图寻找类似的答案,但我找不到任何能直接回答这个问题的答案(这已经困扰了我两天。是的,我必须使用正则表达式)。至于Regex风格,我在.NET工作

非常感谢您的帮助。

这是:

(?<=(?<CharsBefore>.{0,10}))(?=abc)

(?请看:整个匹配是
qqqbc
,第一组是
qqq
。我会立即查看。非常感谢。我不认为我可以将您的评论标记为答案:)我不认为这是一个解决方案,因为您提出的问题看起来不像是常规的正则表达式任务。这几乎可以完美地工作,但是我们是否有可能让它不捕获字符串末尾的“abc”,而只捕获前面字符中出现的任何abc?i、 我不太明白你需要什么。表示您需要获取
Match.Value+Match.Groups[1]。Value
Match.Groups[1]。Value
非常感谢。我们已经设计了一个解决方案,但我会将其添加到书签中,以便在不可避免地需要返回到这种方法时,我们可以将其放在手边。
(?<=(.{0,10}))(?=abc)