【问题标题】:Regex to detect period at end of string, but not '...'正则表达式检测字符串末尾的句点,但不是“...”
【发布时间】:2017-08-10 00:59:49
【问题描述】:

使用正则表达式,我如何将恰好以一个 . 结尾的字符串匹配为:

  • This is a string.

但不是以多个. 结尾的那些:

  • This is a string...

我有一个检测单个 . 的正则表达式:

/[\.]{1}\z/

但我不希望它匹配以 ... 结尾的字符串。

【问题讨论】:

    标签: ruby regex string oniguruma


    【解决方案1】:

    你想要的是一个“消极的后视”断言:

    (?<!\.)\.\z
    

    这会在字符串末尾查找一个句点前面没有句点。其他答案与以下字符串不匹配:"."

    此外,您可能需要注意 unicode 省略号字符... 你可以这样检测:str =~ /\u{2026}/

    【讨论】:

    • 是的,我没有意识到,但我的一些字符串有'..'。所以这个解决方案最适合我的用例。谢谢!
    【解决方案2】:

    你可以使用:

    [^\.][\.]\z
    

    您正在寻找在最后一个点之前有一个不是点的字符的字符串。

    【讨论】:

    • \. 是否需要在[] 中?
    • @sagarpandya82 是的,因为你需要排除一个字符 - 所以你需要一组字符来排除
    • 我的意思是最后一个 '.'匹配。 [\.][.] 不一样吗?\. 不一样吗?
    • 你不需要在一个字符类中转义.,第二个字符类是多余的:[^.]\.\z
    • 如果str = '.'怎么办?
    【解决方案3】:

    我非常喜欢 Regexr

    类似于Dekel的解决方案:

    [^.]+[.]
    

    Live demo

    【讨论】:

    • 我编辑将您的解决方案包含在答案正文中,并避免使用仅链接答案,希望您不介意。 :)
    • “my.cat”或“.”呢? [.] 代替 \. 是可以的,但我不能说我以前见过。
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2019-12-18
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多