RegEx - 可变长度的匹配数

时间:2011-09-13 19:06:03

标签: regex

我正在尝试解析整个文档中包含参考编号的文档。

  

文本文本{4:2}更多令人难以置信的文字{4:3}   {222:115}还有更多文字。

引用将始终包含在括号中,并且两者之间始终存在冒号。我写了一个表达式来找到它们。

{[0-9]:[0-9]}

然而,当你遇到一个两位或三位数时,这显然是失败的,而我却无法弄清楚应该是什么。不会超过3位数{999:999}是要处理的最大尺寸。

有人知道处理这个的正确表达吗?

5 个答案:

答案 0 :(得分:104)

{[0-9]+:[0-9]+}

尝试添加加号(es)

答案 1 :(得分:60)

你使用什么正则表达式引擎?他们中的大多数将支持以下表达式:

\{\d+:\d+\}

\d实际上是[0-9]的简写,但重要的是添加+,意思是“一个或多个”。

答案 2 :(得分:24)

试试这个:

{[0-9]{1,3}:[0-9]{1,3}}

{1,3}表示“匹配前面1到3个字符”。

答案 3 :(得分:8)

您可以使用{min,max}指定上一项匹配的次数。

{[0-9]{1,3}:[0-9]{1,3}}

此外,对于大多数正则表达式,您可以使用\d代替[0-9]

{\d{1,3}:\d{1,3}}

您可能还想考虑转义外部{},只是为了明确它们不是重复定义的一部分。

答案 4 :(得分:0)

{\ d *:\ d *}应该可以工作。

*表示匹配0个或多个先前出现的匹配项,是一个数字。