RegEx - 可变长度的匹配数

Jar*_*les 112 regex

我正在尝试解析一个包含参考数字的文档.

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

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

{[0-9]:[0-9]}
Run Code Online (Sandbox Code Playgroud)

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

有人想知道处理这个问题的正确表达方式吗?

gen*_*sis 113

{[0-9]+:[0-9]+}
Run Code Online (Sandbox Code Playgroud)

尝试添加加号


Lil*_*ard 66

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

\{\d+:\d+\}
Run Code Online (Sandbox Code Playgroud)

\d实际上是简写[0-9],但重要的部分是添加+意味着"一个或多个".


Can*_*ice 27

试试这个:

{[0-9]{1,3}:[0-9]{1,3}}
Run Code Online (Sandbox Code Playgroud)

{1,3}意思是"前面的字符的1和3之间的匹配".


And*_*ark 8

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

{[0-9]{1,3}:[0-9]{1,3}}
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用\d数字而不是[0-9]大多数正则表达式:

{\d{1,3}:\d{1,3}}
Run Code Online (Sandbox Code Playgroud)

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

  • 不,请不要使用大多数正则表达式,除非你喜欢非欧洲数字:http://www.fileformat.info/info/unicode/category/Nd/list.htm (2认同)