【发布时间】:2019-10-17 06:54:32
【问题描述】:
我需要一个单行正则表达式来满足将 0 捕获到多个组的需求。这些行总是以一个“{”开头,然后是一个数字,然后是一个冒号......即在正则表达式中{%d: 然后继续捕获直到它碰到右大括号}
下面的一些示例行:
{1:23842039423409}
{2:JSHDF98343SSDSDASASDSASDSAD993}{1:JSHDF98343993}
{2:JSHDF98343993}{1:23842039423409}{1:BLHASD9293}
{2:{JSHDF98343993}{1:23842039423409}{1:BLHASD9293}
{4missing_colon_not_to_be_captured}
{missing_number_not_to_be_captured}{2:CAPTURE_THIS}
- 第 1 行应该有 1 个组被捕获,
- 第 2 行应该有 2 个组被捕获,
- 第3行应该抓到3组,
- 第 4 行应该捕获 3 个组,
- 第 5 行没有捕获任何内容,
- 第 6 行有 1 个组被捕获。
通过为多个组重复正则表达式,我得到了几乎可以工作的东西(有点),但不认为这是解决这个问题的正确方法,但我正在努力理解如何让它完全工作。
([{%d:][^}]*})([{%d:][^}]*})
将捕获一条线上有两个以上的东西要捕获的组,但显然只会捕获前 2 组,即第 2 行中的 2 组,第 3 行中的前 2 组(但不是第 3 组)、第 4 行的前 2 组(但不是第 3 组)等。
我尝试了其他一些变体,但均未成功。感谢您的帮助!
【问题讨论】:
-
您的商品模式必须是
{\d:[^}]*}或{\d+:[^}]*}。然后,您不能拥有任意数量的捕获组,它们的数量始终由模式固定。因此,您可以使用{\d+:[^}]*}匹配所有出现次数,或者添加您认为必要的任意数量的可选组,以支持它们的最大出现次数,例如({\d+:[^}]*})({\d+:[^}]*})?({\d+:[^}]*})?({\d+:[^}]*})?({\d+:[^}]*})? -
您的正则表达式使用什么语言/工具?
-
谢谢@Wiktor 会试试的。
-
@TimBiegeleisen 我正在使用一个名为“Paxata”的数据准备工具,我相信它实现了 javascript 正则表达式。
标签: regex