如何组合其后没有空格的点(。)? [正则表达式]
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);
这是我的代码[^\.!\?]+[!\?\.]
我想在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);