【问题标题】:Regex - Finding fullstops (periods) that aren't followed by a space正则表达式 - 查找后面没有空格的句号(句点)
【发布时间】:2019-11-19 18:06:20
【问题描述】:

我正在尝试创建一个简单的语法校正工具。

我想创建一个正则表达式来查找 句号 (" . ") 不是 后跟 空格 所以我可以用句号和空格替换它。

例如This is a sentence.This is another sentence.

只有上例中的第一个句号应该在表达式中匹配。

我尝试过/\.[^\s]/g,但它在匹配的句号之后返回了一个额外的字符。我只想匹配句号。

我该怎么做?

【问题讨论】:

    标签: regex


    【解决方案1】:

    模式中的否定字符类[^\s] 需要匹配(除空白字符之外的任何字符),这就是您有附加字符的原因。

    如果您只想匹配点,您可以使用否定前瞻来断言右侧的内容不是 whitspace 字符或字符串的结尾:

    \.(?!\s|$)
    

    Regex demo


    不匹配后面没有空格字符的点,不包括换行符:

    \.(?![^\S\r\n])
    

    Regex demo

    【讨论】:

    • 一个小问题是非间隔句号后的新行无法识别。例如。 1.词尾。新词。
    • @karjedavpalaa 试试这个regex101.com/r/KmHmBa/1
    • 我查看了示例,但它也不适用于 regex101.com。
    • @karjedavpalaa 你可以像这样匹配两个点regex101.com/r/P9NcsW/1
    • 做到了!非常感谢!
    【解决方案2】:

    您可以使用以下方法查找所有点:

    (\.)
    

    这将匹配以下示例中的所有点:

    这是一个句子。这是另一个句子。

    我在找。为点。 . ...

    您可以添加 |$ 来查找行尾,稍作调整,您将获得一个匹配所有点的正则表达式,该点后不跟空格,也不在行尾:

    (\.(?!\ |$))
    

    请注意,这里有一个空格作为文字。 “必须在任何地方工作”的示例如下:

    (\.(?![[:space:]]|$))
    

    如果没有,请搜索您使用的语言的正则表达式参考。

    【讨论】:

    • 您不必转义空格,您可以省略模式周围的捕获组。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多