RegEx-可变长度的匹配数


129

我正在尝试解析一个文档,该文档的参考数字始终乱七八糟。

文本文本{4:2}更令人难以置信的文本{4:3}在{222:115}之后发布,还有更多文本。

这些引用将始终被括在方括号中,并且两者之间将始终有一个冒号。我写了一个表情找到他们。

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

但是,当您遇到两位数或三位数的数字时,这显然会失败,而且我在弄清楚应该是什么时遇到了麻烦。{999:999}是不能处理的最大大小。

有人有一个合适的表达方式来处理这个想法吗?


8
即使OP不在乎,我也很好奇:为什么对这个问题持反对态度?我看不出有什么问题。
约翰

3
@John:出于某些原因,人们喜欢在容易回答的地方(特别是在regex标签中)否决问题。
CanSpice 2011年

1
最后,这个问题在google上排名更高,我在这个问题中找到了答案。
Jasonfish

Answers:


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

尝试添加加号


这花了我很长时间才找到...谢谢您提供此信息!
级别42

76

您正在使用什么正则表达式引擎?其中大多数将支持以下表达式:

\{\d+:\d+\}

\d实际的简写是[0-9],但重要的部分是另外的+意思是“一个或多个”。


31

试试这个:

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

{1,3}意思是“匹配前述的字符1和3之间”。


8

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

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

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

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

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


2
不,请不要使用大多数正则表达式来做,除非您喜欢非欧洲数字:fileformat.info/info/unicode/category/Nd/list.htm
xanatos 2011年

1

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

*表示匹配0个或多个先前出现的字符,为数字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.