0

Dies ist mein Code [^\.!\?]+[!\?\.]Wie kombiniere ich Punkt (.), Der danach keine Leerzeichen mehr enthält? [Regulärer Ausdruck]

Ich möchte jeden Satz in einem Beitrag perfekt trennen. Ich benutze Javascript regex. Das Problem liegt vor, wenn der Punkt (.) Zwischen Zeichen ohne Leerzeichen steht, also getrennt sind, wenn sie zusammengeführt werden sollen.

Zum Beispiel: "!. Apa Yang terjadi Aku terkena musibah Uang Saya 90,000 dicuri maling"

Uang Saya 90.

und

000 Dicuri Maling.

sollte in

Uang Saya 90,000 dicuri maling verschmelzen.

siehe Bild unten

angebracht

Regular Expression Tester

+3

macht diese Arbeit für Sie? '. +? [?!.] (? = | $)' – CAustin

+0

@CAustin, Ja, das funktioniert wirklich. Ich bin dir sehr dankbar. –

Antwort

1

Noch besser, können Sie die folgende Syntax verwenden, die mehrere Räume und andere Leer nach dem Satz Zeichen und die führenden Leerzeichen nicht Teil endet akzeptieren wird der Zeichenfolge, die extrahiert wird !!!

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

Einschränkungen:

  • zum Beispiel 10 B.C. und andere Abkürzungen werden als Satz erkannt werden ...
  • Strings wie: terkena musibah!Uang saya 90.000 dicuri maling. wird als ein Satz erkannt werden ...

Neue Version:

Ich habe die Regex in der folgenden Art und Weise angepasst, die Einschränkungen des Regex zu lösen vorgeschlagen bisher:

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

und ich habe Test auf der folgender Text:

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. 

Vorteile:

Abkürzungen erhalten sind: Ak[u +10 B.C. ter,ke]na 10.3 mus}ibah. als ein Satz zu sehen ist, die Erhaltung v.Chr.

terkena musibah!Uang saya 90.000 dicuri maling. würde in zwei Sätze getrennt werden: terkena musibah!undUang saya 90.000 dicuri maling.

Viel Glück!

+0

[neue Version] funktioniert nicht in Tester https://www.regextester.com/?fam=99639 –

+0

Lookbehind-Operator nicht in Javascript unterstützt ... rechts ... – Allan

+0

Ich bin sehr interessiert an Regex '[^ \ s] . +? [?!.] (? = \ s + | $) 'aber es wäre besser, wenn 3 Ziffern vor dem Punkt (.) mit dem nachfolgenden Satz zusammengeführt würden. Beispiel: '10. Zehn und 100. Einhundert. Sehen Sie https://www.regextester.com/?fam=99651 –

2

([.!?])\s Versuchen Array zu erstellen, wie die folgenden:

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);

Verwandte Themen