捕获所有适合正则表达式的组

C农

我有一个正则表达式,几乎可以完全满足我的要求: \.?(\w+[\s|,]{1,}\w+[\s|,]{1,}\w+){1}\.?

意思是它捕获连续3个单词的出现,除了空格和逗号(因此仅句子的一部分)外,其他单词之间没有任何分隔。但是我希望这与句子中3个单词的每个实例匹配

因此,在这个超简单的示例中:

Hi this is Bob.

应该有2个捕获-“嗨,这是”和“这是鲍勃”。我似乎无法弄清楚如何使正则表达式引擎以这种方式解析整个语句。有什么想法吗?

维克多·史翠比维

您不仅可以在捕获组中获得重叠的文本,而且可以通过捕获组保存所需的子字符串来获得重叠的匹配项

使用

(?=\b(\w+(?:[\s,]+\w+){2})\b)

正则表达式演示

无固定的正向超前测试会在字符串的每个位置测试空字符串是否匹配。它不消耗字符,但仍可以返回通过捕获组获得的子匹配项。

正则表达式细分:

  • \b -单词边界
  • (\w+(?:[\s,]+\w+){2})-3个“单词”,以,或空格分隔
    • \w+ -1个或多个字母数字符号,后跟
    • (?:[\s,]+\w+){2} -2个序列,包含1个或多个空格或逗号,后跟1个或多个字母数字符号。

该模式仅(...)被放置在前行中的捕获组(?=...)

单词边界在此表达式中很重要,因为它\b可以防止单词内部(两个字母数字字符之间)匹配由于前瞻未锚定,因此它会测试输入字符串中的所有位置,并\b限制可以返回匹配项的位置。

在C#中,您只需要收集all match.Groups[1].Value,例如:

var s = "Hi this is Bob.";
var results = Regex.Matches(s, @"(?=\b(\w+(?:[\s,]+\w+){2})\b)")
                        .Cast<Match>()
                        .Select(p => p.Groups[1].Value)
                        .ToList();

IDEONE演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复杂正则表达式与捕获组匹配

来自分类Dev

正则表达式-捕获组混乱

来自分类Dev

使用Python正则表达式捕获组中的所有重复项

来自分类Dev

PHP正则表达式和相邻捕获组

来自分类Dev

正则表达式:捕获组?

来自分类Dev

正则表达式非捕获组-没用吗?

来自分类Dev

正则表达式非捕获组ins Scala

来自分类Dev

当捕获组不存在时,正则表达式将捕获所有内容

来自分类Dev

正则表达式:捕获组中的捕获组

来自分类Dev

正则表达式捕获组快速

来自分类Dev

重复正则表达式捕获组的捕获部分

来自分类Dev

使用命名捕获来查找给定正则表达式中命名组的所有名称

来自分类Dev

正则表达式中捕获组的奇怪行为

来自分类Dev

如何在一个正则表达式中捕获所有正则表达式组?

来自分类Dev

正则表达式:将所有内容匹配到一个可选的捕获组

来自分类Dev

在捕获的组正则表达式上修剪空间

来自分类Dev

正则表达式除了捕获组外还捕获所有内容

来自分类Dev

正则表达式:捕获重复捕获组的所有单个实例

来自分类Dev

使用Python正则表达式捕获组中的所有重复项

来自分类Dev

正则表达式,捕获组

来自分类Dev

正则表达式捕获组

来自分类Dev

当捕获组不存在时,正则表达式将捕获所有内容

来自分类Dev

正则表达式-捕获所有重复的迭代

来自分类Dev

捕获所有适合正则表达式的组

来自分类Dev

如何构建正则表达式以捕获所有可能的匹配组

来自分类Dev

正则表达式不捕获所有组

来自分类Dev

带有可选捕获组的正则表达式

来自分类Dev

获取所有 perl 正则表达式捕获组的值

来自分类Dev

捕获组中的正则表达式捕获组

Related 相关文章

热门标签

归档