【问题标题】:Regex match pattern after positive look ahead积极展望后的正则表达式匹配模式
【发布时间】:2015-01-12 03:32:41
【问题描述】:

我有一个正则表达式正在做一个积极的前瞻。积极的前瞻依赖于字符串中存在的“cfu/ml”,但不包含在结果中。

这是正则表达式:

((((less|greater)\s*tha[nt]\s*)?[><]*[\d]+[\sx,.-]*)*)+(?=CFU\s?/\s?ML)

例如字符串:“100,000,000 x 85 x 9345 cfu/ml”

Match1:“100,000,000 x 85 x 9345”

这工作得很好,但是在积极的前瞻之后尝试匹配任何东西都行不通。我正在尝试做的是像这样在积极展望之后添加另一个结果捕获组。

((((less|greater)\s*tha[nt]\s*)?[><]*[\d]+[\sx,.-]*)*)+(?=CFU\s?/\s?ML)\s*blah

例如字符串:“100,000,000 x 85 x 9345 cfu/ml blah”

Match1:“100,000,000 x 85 x 9345”

Match2:“废话”

在积极的前瞻性工作之后似乎什么都没有,有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: regex lookahead


    【解决方案1】:

    前瞻是零宽度——它们不匹配任何字符,它们只是断言在字符串中的那个点某些条件为真。因此,如果前瞻匹配,那么它后面的字符将是 CFU / ML 或任何其他前瞻匹配的字符。

    您想忽略这些字符,不过——这意味着不仅要断言它们存在,还要实际使用它们,这样它们就不会成为匹配组的一部分。例如,您可以将前瞻设置为非捕获组。完全匹配的字符串中仍会包含那些额外的字符,但捕获组不会包含它们。

    【讨论】:

    • 换一种说法,积极的前瞻性放在正则表达式的中间是没有意义的。实际上,您真的只想在正则表达式的末尾使用它们。放弃前瞻,只使用普通表达式。
    • 好的,我明白你们在说什么,像这样 (((less|greater)\stha[nt]\s)?[>
    • @mgmedick:基本上,是的。我想。 Markdown 稍微破坏了您的评论,但分组看起来很正确。
    • @mgmedick:但是,如果您不希望子模式成为匹配组的一部分,您可能也希望使它们不被捕获。 (?:subpattern) 对此有好处。你的模式看起来会匹配像100,000,000 x &gt;85 x less than 9345 CFU/ML blah 这样的字符串。这是否有效取决于您自己,或者如果无效,您是否需要担心得到这样的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多