【发布时间】:2019-08-31 08:21:01
【问题描述】:
我有一串这样的括号:
(this) (should) (be) (group) (one) (thisshouldbegrouptwo) (this) (should) (be) (group) (three)
我想将这个正则表达式分成三组,用常量字符串thisshouldbegrouptwo,可选地在括号中,分隔组:
1. Group: (this) (should) (be) (group) (one)
2. Group: (thisshouldbegrouptwo)
3. Group: (this) (should) (be) (group) (three)
字符串(thisshouldbegrouptwo) 是一个固定的可选字符串,其括号也是可选的。如果它不存在,我希望得到以下结果:
1. Group: (this) (should) (be) (group) (one)
2. Group:
3. Group: (this) (should) (be) (group) (three)
在这种情况下,如果整个字符串匹配在一个组中也是可以的。
第 1 组或第 3 组的括号数量不重要,只有中间组周围的括号很重要,如果找到则应与中间组一起,而不是与边缘组。
这是我目前为止的正则表达式 (demo):
(\(.*\))?(?:\s(\(thisshouldbegrouptwo\)\s))?(\(.*\))
【问题讨论】:
-
你能更好地解释一下你的实际需求吗?你怎么知道这些组是什么?其中的具体文字?空格的存在与否?如所问,我们真的没有足够的工作,而且你的演示并没有真正的帮助。也许您可以说明您的演示没有按照您的意愿进行操作?在问题本身中提供您正在处理的正则表达式也是一种很好的做法,而不仅仅是在演示链接中。
-
第一组应该是 (thisshouldbegrouptwo) 之前的所有内容,第二组应该是 (thisshouldbegrouptwo) 本身,第三组应该是 (thisshouldbegrouptwo) 之后的所有内容。问题是,不能保证在之前或之后(这应该是grouptwo)。但我必须确保匹配的组始终相同。
-
根据该描述,
(.*)(\(?thisshouldbegrouptwo\)?)(.*)可以。我怀疑你有更多的要求。除非您告诉我们这还不够,否则我们无法为您提供帮助。 -
对不起,由于我的英语口语知识有限,很难描述。
-
这个例子确实有效,同时也存在 long (thisshouldbegrouptwo)。但可能存在这样的情况,即字符串中不存在该字符串。然后我需要匹配一组中的完整全线。在本例中,这将导致不匹配。
标签: regex parentheses