0

これは私のコードです[^\.!\?]+[!\?\.]後でスペースを入れないドット(。)を結合する方法は? [正規表現]

すべての文を完全に投稿で分けたいと思います。私はjavascriptの正規表現を使用しています。問題は、ドット(。)が空白のない文字の間にあるため、マージする必要があるときに区切られている場合です。例えば

: "アパヤンterjadi阿久terkena musibah Uang 90.000 dicuriのメーリング沙耶?!。"

Uang沙耶90

000 dicuri maling。

Uang沙耶90.000 dicuriのメーリングにマージする必要があります。

これは、ほとんどの場面で動作するはず

Regular Expression Tester

+3

はあなたのためにこの仕事をしていますか? '+?[?!](?= | $)' – CAustin

+0

@CAustin、はい、これは本当にうまくいきます。あなたに心から感謝してます。 –

答えて

1

をさらに良いことに、あなたは一部ではありませんいくつかのスペースおよびその他の空白文字の文字を終了した文の後に、先頭の空白文字を受け入れるには、次の構文を使用することができます抽出される文字列の

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

制限:例10 B.C.や他の略語について

  • が文として検出されます...のよう
  • 文字列:terkena musibah!Uang saya 90.000 dicuri maling.は、一つの文として検出されます...

新バージョン:

私は正規表現の限界を解決するために、次のように正規表現を適応し、これまでに提案した:

[^\s.!?][[email protected]#$%^&,;"':*()-_+=/\\|{}><()[\]\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. 
[email protected] 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.は紀元前を維持し、1文として見られていますterkena musibah!Uang saya 90.000 dicuri maling.

幸運:

terkena musibah!Uang saya 90.000 dicuri maling.は文章で分離されます!

+0

[新しいバージョン]テスターで動作していませんhttps://www.regextester.com/?fam=99639 –

+0

javascriptでサポートされていないlookbehind演算子... right ... – Allan

+0

私は正規表現 '[^ \ s] 。+?[?!](?= \ s + | $) 'しかし、ドット(。)の前の3桁が後の文とマージした方が良いでしょう。例: '10。 Ten.'と '100。 100.ルックhttps://www.regextester.com/?fam=99651 –

2

は、次のような配列を作成する([.!?])\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);

関連する問題