使用前瞻性与贪婪的正则表达式

时间:2015-10-07 14:09:59

标签: regex

如果我有一个字符串如" 1)测试1 22)测试2 333)测试3 4444)测试4 55555)测试5",是否有一个前瞻性正则表达式来拆分并保持{{1 }})?

我尝试了(\d+\),非贪婪地用数字而不是(?=(\d+\)))分割数字。防爆。 2)和22)都是(\d+)的{​​{1}}。

substrings

3 个答案:

答案 0 :(得分:1)

您需要使用单词边界:

(?=\b\d+\))

请参阅demo

请注意,这里的数字序列应该以非单词字符开头。

要修剪开始,只需限制\b使用否定前瞻(?!^)

(?=(?!^)\b\d+\))

请参阅another demo

由于\b可能匹配字符串开头的空字符串(在开头和单词字符之间),(?!^)前瞻确保在该位置没有匹配,以便我们不要得到一个空元素。

答案 1 :(得分:0)

也许这就是你要找的东西?

(?=\b\d{2,})

Regex101

或许这将匹配每一行:

.+?(?=\b\d{2,}|$)

Regex101

答案 2 :(得分:0)

你使用这个基于前瞻性的正则表达式:

(?!\A)\s+(?=\d+\))

RegEx Demo

RegEx分手:

(?!\A)    # We are at start of input
\s+       # Match 1 or white-space
(?=\d+\)) # lookahead to make sure next position has digits and )