正则表达式可以正确匹配组

时间:2016-07-07 09:56:28

标签: regex

我希望解析自定义降价文本,例如下面的示例。

1
Post:1
Image:1|thumb
Image:1|thumb|html classes here
1|thumb|html classes here

一般格式:ModelName:ID|image_size|html classes

冒号(:)之后的所有内容都是可选的。请注意,id也可以是字符串。在最后一个管道之后可以有许多空格分隔的css类。这就是我到目前为止所做的:

^([\w\.]+)?(?::([-\w\d\.]+))(?:\|(\w+))?(?:\|([-\w\s\d]+))?$

Regular expression visualization

Debuggex Demo

这个正则表达式有几个问题,我无法弄清楚如何修复

  1. 冒号应出现在合并为main的行之前,而不是之后。换句话说,只有在存在第1组时才需要冒号。 (与第3组和第4组之前的管道(|)相同。
  2. 正则表达式与顶部的最后3个测试用例不匹配。 1Post:1已正确匹配。

1 个答案:

答案 0 :(得分:1)

你可以用

来做
(?:(\w+):)?(\d+)(?:[^|\n]*\|([^|\n]*)(?:\|(.*))?)?

它将捕获第1组中的第一个标记,第二组中的ID,第3组中的图像大小以及第4组中的类。

首先它捕获标记(可选),然后是数字。接下来是一个也是可选的组,用于扫描|,然后将所有内容捕获到另一个|或行尾。如果发现|,则将所有内容捕获到行尾。

See it here at regex101