正则表达式解析多个元素,第一个元素是可选的

时间:2009-12-09 19:27:16

标签: regex

我正在尝试通过在时间条目的注释中使用文本模式将我的时间表应用程序与Fogbugz集成,以指示工作是在案例上完成的。

情景A: 如果在案例#123上完成了工作,则说明将是: [123]重写了javascript代码。

所需输出:案例:123注意:重写了javascript代码。

情景B: 如果工作与案件无关,则说明如下: 重写了javascript代码。

所需输出:案例:空注:重写了javascript代码。


要解析字符串,我正在使用Pentaho Data Integration的正则表达式评估转换,但我认为无论使用哪种工具,正则表达式都可能是相同的。

这是我正在使用的代码:

(\[(.*)\])(.*)

对于场景A,我得到: 可忽视的领域:[123] 案例:123 注意:重写了javascript代码。

情景B,我得到: 可忽略字段:null 案例:无效 注意:Null

现在回答问题(最后!) - 如果没有出现“[##]”模式,我有没有办法让部分显示?

3 个答案:

答案 0 :(得分:1)

你可能想试试这个:

(\[(.*)\])?\s*(.*)

答案 1 :(得分:1)

^\s*(\[[^]]+\])?\s*(.*)

如果你不是绝对的话,请不要使用.*,要积极地想要匹配所有内容。你想要匹配的是“关闭]”之前的所有内容,这在正则表达式中应该是明确的。

说明:

^          # start-of-string
\s*        # any number of leading white-space (gets ignored)
(          # match group 1
  \[       # literal [
  [^]]+    # anything but ]
  \]       # literal ]
)?         # end match group 1, make optional
\s*        # any number of intermediary white-space (gets ignored, too)
(.*)       # anything else on that line

答案 2 :(得分:0)

这不是严格意义上的正则表达式问题。它由两部分组成:正则表达式匹配,然后应用一点逻辑: 如果[n +]部分匹配,则输出“\ 1 Note”否则为“Null Note”。