【问题标题】:RegEx - Match Word Before Single Char, But Not Double Char?RegEx - 在单个字符之前匹配单词,但不匹配双字符?
【发布时间】:2011-09-01 07:31:57
【问题描述】:

冰岛:国家\n欧洲::大陆\n雷克雅未克:城市

使用上面的字符串,我想匹配出现在单个冒号之前的单词,而不是那些出现在双冒号之前的单词。另外,如果单个冒号之前有空格,我希望它被忽略并匹配空格之前的单词。

所以从上面的字符串中我想匹配“Iceland”(没有尾随空格)和“Reykjavik”。

我认为创建捕获组会起作用,但它不起作用:

/(\w+(?=:))(?!=::)/gm

我不知道如何忽略单个冒号前的空格。

【问题讨论】:

    标签: regex pattern-matching


    【解决方案1】:

    我认为您只是否定前瞻断言的语法错误...它是 (?!pattern),而不是 (?!=pattern)。

    那就试试吧:

    /(\w+(?=:))(?!::)/gm
    

    [编辑 - 错过了问题的另一部分]

    要忽略空格,只需匹配它但不要捕获它。

    perl -nle 'print $1 if /(\w+)\s*(?=:)(?!::)/gm'
    hello  ::there   :dude
    

    ...打印“那里”。

    【讨论】:

    • 冒号前不支持空格
    • 我是 RegEx 的新手,所以感谢您纠正我的语法和答案。
    【解决方案2】:
    (\w+)\s*:(?!:)
    

    看起来这对你来说可能是一场胜利

    【讨论】:

    • 这将在匹配中包含\s*:。不是什么大问题,因为他可以只使用捕获组,但它会稍微改变模式的语义。
    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多