目前我正在开发一个将长列分成短列的应用程序。为此,我将整个文本拆分为单词,但目前我的正则表达式也拆分了数字。
我所做的是这样的:
str = "This is a long string with some numbers [125.000,55 and 140.000] and an end. This is another sentence.";
sentences = str.replace(/\.+/g,'.|').replace(/\?/g,'?|').replace(/\!/g,'!|').split("|");
结果是:
Array [
"This is a long string with some numbers [125.",
"000,55 and 140.",
"000] and an end.",
" This is another sentence."
]
期望的结果是:
Array [
"This is a long string with some numbers [125.000, 140.000] and an end.",
"This is another sentence"
]
我必须如何更改我的正则表达式才能实现此目的?我需要注意可能遇到的一些问题吗?或者搜索一下就足够了". "
, "? "
and "! "
?
str.replace(/([.?!])\s*(?=[A-Z])/g, "$1|").split("|")
Output:
[ 'This is a long string with some numbers [125.000,55 and 140.000] and an end.',
'This is another sentence.' ]
分解:
([.?!])
= 捕获任一.
or ?
or !
\s*
= 捕获前一个标记后面的 0 个或多个空白字符([.?!])
。这说明了与英语语法匹配的标点符号后面的空格。
(?=[A-Z])
= 仅当下一个字符在 A-Z 范围内(大写 A 到大写 Z)时,前面的标记才匹配。大多数英语句子都以大写字母开头。以前的正则表达式都没有考虑到这一点。
替换操作使用:
"$1|"
我们使用了一个“捕获组”([.?!])
我们捕获其中一个字符,并将其替换为$1
(比赛)加上|
。所以如果我们捕获?
那么替换将是?|
.
最后我们把管道分开|
并得到我们的结果。
所以,本质上,我们要说的是:
1)查找标点符号(其中之一.
or ?
or !
)并捕获它们
2) 标点符号后面可以选择包含空格。
3) 标点符号之后,我希望有一个大写字母。
与之前提供的正则表达式不同,这将正确匹配英语语法。
从那里:
4)我们通过附加管道来替换捕获的标点符号|
5)我们分割管道来创建一个句子数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)