如何解决正则表达式捕获了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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。