Regex用于在特定条件下为新句子添加空格或句号

Regex for adding a space or period for new sentence under certain conditions

本文关键字:添加 句子 空格 用于 条件下 新句子 Regex      更新时间:2023-12-09

我正在尝试创建一个正则表达式(可在Javascript/Node.js中实现):

  • 只要字母或字符(A-Za-z!@#$%^&*()等)不是数字)后面跟一个句点,然后跟一个大写字母(中间没有空格)和/或
  • 只要空白后面跟着一个大写字母(A-Za-z,但不是数字或字符),就加一个句点(.),除非有多个大写字母,例如在首字母缩写中,和/或
  • 只要字符串中的任何字符、字母或数字后面没有任何其他内容,就加一个句点(.

例如,在第一种情况下:

This is a sample sentence.This is a sample new sentence.

应该变成:

This is a sample sentence. This is a sample new sentence.

在第二种情况下,例如:

This is a sample sentence This is a sample new sentence.

应该变成:

This is a sample sentence. This is a sample new sentence.

但是,在第二种情况下:

This is a sample sentence with TEST This is a sample new sentence.

应该变成:

This is a sample sentence with TEST. This is a sample new sentence.

在第三种情况下,例如:

This is a sample sentence. This is a sample new sentence

应该变成:

This is a sample sentence. This is a sample new sentence.

请注意,我希望搜索和更改的这些示例在句点和间距的位置上存在差异。

我已经搜索了一些变体,但没有找到符合上面列出的确切标准的我现在只担心句点和空格,而不是其他类型的标点符号,除非有一个更通用的解决方案可以应用于不止这些情况我想用这个开始清理一些日志文件和其他区域中的语法。

如果这读起来太复杂,我提前道歉。请留下评论,如果需要,我会很乐意澄清。

虽然我应该包括一个标准的警告,不要使用编程方法来处理自然语言(这对计算机来说非常复杂和难以理解),但下面显示了一系列正则表达式(当在字符串上按顺序运行时)。

对于第一种情况:

s/([^0-9.])'.([^0-9])/'1. '2/g

对于第二种情况:

s/([^.]) ([A-Z][a-z])/'1. '2/g

对于第三种情况:

s/([^.])$/'1./g

稍微分解一下:

s/A/B/g的意思是"用B替换文本中每次出现的正则表达式A"。

(A)的意思是"捕获A,以便我们以后可以再次使用它"(这被称为捕获组)。

[^0-9.]表示"匹配所有非数字字符或句点字符的字符"。这是一个否定的字符类

'.与文字句点(".")字符匹配。

$是线锚的末端,它与字符串的末端相匹配。

'1'2分别指第一和第二捕获组。

因此,基本上,这些正则表达式所做的是捕获要修改的区域周围的内容,然后用内容加修改替换该内容加区域。

对于第一种情况,使用以下内容匹配并替换为space:

(?='.[^'d's])

对于第2种和第3种情况,使用以下regex匹配并替换为.

(?<!'.)$|(?='s[A-Z])