目前我正在开发一个将长列拆分为短列的应用程序。为此,我将整个文本拆分为单词,但此时我的正则表达式也将数字拆分
我所做的是:
str=“这是一个长字符串,包含一些数字[125.000,55和140.000]和一个结尾。这是另一个句子。”;
句子=str.replace(/\.+/g,“.|’)。replace(/\?/g,“?|’)。replace(/\!/g,“!|’)。split(“|”);
结果是:
数组[
“这是一个带有一些数字[125]的长字符串。”,
“000、55及140。”,
“000]和结束。”,
“这是另一句话。”
]
预期的结果将是:
数组[
“这是一个长字符串,包含一些数字[125.000,140.000]和一个结尾。”,
“这是另一句话”
]
我必须如何更改正则表达式才能实现这一点?我需要注意我可能遇到的一些问题吗?或者搜索“
”、“?“
和”!“
”就足够了吗
str.replace(/([.?!])\s*(?=[A-Z])/g,“$1””。拆分(“|”)
输出:
[“这是一个长字符串,包含一些数字[125.000,55和140.000]和一个结尾。”,
“这是另一句话。”]
细分:
([.?!])
=捕获或
?
或
\s*
=在上一个标记([.?!])
之后捕获0个或多个空白字符。这说明了与英语语法匹配的标点符号后面的空格
(?=[A-Z])
=只有当下一个字符在A-Z(大写A到大写Z)范围内时,前面的标记才会匹配。大多数英语句子都以大写字母开头。以前的正则表达式都没有考虑到这一点
“替换”操作使用:
“$1”
我们使用了一个“捕获组”([.?!])
,捕获其中一个字符,并将其替换为$1
(匹配)加上。因此,如果我们捕获了
?
,那么替换将是?|
最后,我们拆分管道|
,并得到结果
因此,本质上,我们所说的是:
1) 查找标点符号(其中一个或
?
或!
)并捕获它们
2) 标点符号可以选择在后面加空格
3) 在标点符号之后,我希望是大写字母
与前面提供的正则表达式不同,这将正确匹配英语语法
从那里:
4) 我们通过添加管道来替换捕获的标点符号|
5) 我们将管道分割成一组句子