2009-12-09 52 views
0

我想通过在时间条目的注释中使用文本模式来表示工作已完成的情况下,我的时间表应用程序与Fogbugz集成。正则表达式解析多个元素,第一个是可选的

情景A: 如果在案例#123上做了工作,注意事项是: [123]重写了javascript代码。

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

情景B: 如果工作与案例无关,则注释将为: 重写了JavaScript代码。

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


为了解析字符串,我使用Pentaho的数据集成的正则表达式评价转变,但我觉得正则表达式很可能是相同的,无论有问题的工具。

这是我使用的代码:

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

对于方案A,我得到: 忽略的领域:[123] 案例:123 注:重写了JavaScript代码。

方案B,我得到: 忽略的领域:空 案例:空 注:空

现在的问题 - 有,我得到的说明部分显示的方式(终于!)如果没有显示“[##]”模式?

回答

0

你可以试试这个:

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

这工作!谢谢!正则表达式对我来说总是有点像火箭科学。 – Braintapper 2009-12-09 19:34:42

+0

不客气。这实际上并不难,一旦你习惯了它...... – Lucero 2009-12-09 19:36:13

0

这不是一个严格的正则表达式问题。它由两部分组成:正则表达式匹配,然后应用一点逻辑: 如果[n +]部分匹配,输出“\ 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 
+0

这是非常丰富的,谢谢! – Braintapper 2009-12-09 20:41:05

相关问题