正则表达式捕获了1到5个ords的捕获组

问题描述

| 我有一个类似\'这是[[一个捕获的组]]的句子。\'捕获之间的单词数可以是1到5。 我想挑出两个括号之间的所有内容包括括号)。我知道我可以使用类似“ 0”的方法,但是我想尝试更精确一些,所以我认为这会起作用:“ 1” 谁能看到为什么这行不通?它捕获方括号之间是否只有一个单词,但不包含多个单词。我认为the2ѭ可以再增加0到4个字。 谢谢,比尔·N

解决方法

您创建了一个以上的捕获组,每个括号一个。尝试这个:
@\"^.*(?<identifier>\\[\\[\\w*(?:\\s\\w*){0,4}\\]\\]).*$\"
(?:)
这是一个非捕获组,不会创建变量,因此您的结果仍在命名组中。 更新:当然,正如其他两个答案所指出的那样,您的主要问题是缺少的“ 5”字,我也将此添加到了解决方案中。 更新2:添加ѭ5时,不需要
\\b
,因此将其删除。,我想您会忘记字距表(
\\s
):
^.*(?<identifier>\\[\\[\\w+(\\s+\\b\\w+){0,4}\\]\\]).*$
,您的问题在这里:
(\\b\\w*){0,4}
由于您不允许使用空格,因此无法使用。更改为:
(\\s+\\b\\w*){0,4}
这将捕获空间,但是您可以轻松地进行后处理(使用
Trim()
)。,我的偏好是这样的(未经测试):
^[^\\[]*(?<identifier>\\[\\[\\s*(\\w+(?:\\s+|(?=\\]))){1,5}\\]\\])[\\S\\s]*$
^                           # begin of string
 [^\\[]*                      # some optional not \'[\' chars
 (?<identifier>              # <ID> begin
    \\[\\[                        # \'[[\'
         \\s*                             # some optional whitespace
         (?:\\w+ (?:\\s+|(?=\\])) ){1,5}    # 1-5 words separated by spaces
    \\]\\]                        # \']]\'
 )                           # end <ID>
 [\\S\\s]*                     # some optional any chars
$ 
                     # end of string