如何组合其后没有空格的点(。)? [正则表达式]

How to Combine dot(.) that has no spaces thereafter? [Regular Expression]

这是我的代码[^\.!\?]+[!\?\.]

我想在post中完美地分隔每个句子。我正在使用 javascript 正则表达式。问题是当点 (.) 位于没有空格的字符之间时,它们在应该合并时被分开。

例如: "Apa yang terjadi?Aku terkena musibah!Uang saya 90.000 dicuri maling。"

Uang saya 90.

000 dicuri maling.

应该合并到

Uang saya 90.000 dicuri maling.

见下图

这应该适用于大多数情况。

(?=[^ ]|^).+?[?!.](?= |$|\n)

在此处检查:https://regexr.com/

更好的是,您可以使用以下语法,该语法将 接受几个空格 和句子结束字符之后的其他空白字符,而前导空白字符 将不会是将被提取的字符串的一部分!!!

[^\s].+?[?!.](?=\s+|$)

限制:

  • 例如10 B.C.和其他缩写将被检测为句子...
  • 像这样的字符串:terkena musibah!Uang saya 90.000 dicuri maling. 将被检测为一个句子...

新版本:

我按以下方式调整了正则表达式,以解决目前提出的正则表达式的局限性:

[^\s.!?][a-zA-Z@#$%^&,;"':*()-_+=/\|{}><()[\]\s\d]*?([?!]|((?<=[^A-Z])\.(?=[^0-9])))

并且我已经在以下文本上对其进行了测试:

Apa ya{ng terjadi? Ak[u +10 B.C. ter,ke]na 10.3 mus}ibah.Uang say\a 90!000 dic&uri ma|ling.
Apa yang te*r(j)adi? Aku terkena mus%ibah! Uang sa^ya 90.000 dicuri maling.
ter;ke|na mus-ibah?uang saya 90..000 dicuri m"aling.
ter@kena mus+ibah!ua=ng say$a 90?000 dicuri ma'ling.
terk\ena mus#ibah.uang saya 90.000 dicuri maling.
Apa yang terjadi? Aku 10 B. C. terke\na mu/sibah.Uang saya 90!000 dicuri maling.
Apa yang terjadi? Aku -10 B. C. terke\na mu/sibah. Uang saya 90!000 dicuri maling.

优点:

保留缩写:Ak[u +10 B.C. ter,ke]na 10.3 mus}ibah. 被视为一个句子,保留 B.C.

terkena musibah!Uang saya 90.000 dicuri maling. 将被分成 两个 句子:terkena musibah! Uang saya 90.000 dicuri maling.

祝你好运!

尝试([.!?])\s创建如下数组:

let str =  "Apa yang terjadi? Test test test. Aku terkena musibah! Uang saya 90.000 dicuri maling."
str = str.split(/([.!?])\s/g);
let res = [];
for(let i=0; i <= str.length; i=i+2){
  let x = str.length-1 > i? str[i+1] : '';
  let newstr = str[i] + x;
  res.push(newstr);
}
console.log(res);