Home > Net >  Split text by regex
Split text by regex

Time:01-14

I wrote this regex - ([0-9][-][0-9]{2,3}.*[A-Za-z]) but it's not is what i want

https://regex101.com/r/A5DbyY/1 - text that need to split

I need get array like this:

[
"1-10 Klinische Untersuchung", 
"1-100Klinische Untersuchung in Allgemeinanästhesie
Hinw.:Die Allgemeinanästhesie ist im Kode enthalten
Dieser Kode ist nur dann zu verwenden, wenn die Untersuchung unter Anästhesie als
selbständige Maßnahme durchgeführt wird. Erfolgt in der gleichen Sitzung ein invasiver
oder operativer Eingriff, der eine Anästhesie erfordert, ist die Untersuchung nicht gesondert
zu kodieren
Untersuchung einzelner Körpersysteme
(1-20...1-33)
Hinw.:Das Anästhesieverfahren bei einer diagnostischen Maßnahme kann zusätzlich kodiert werden, sofern die
diagnostische Maßnahme üblicherweise ohne Allgemeinanästhesie durchgeführt wird (8-90)", 
"1-20 Neurologische Untersuchungen
Hinw.:Das neurologische Monitoring ist gesondert zu kodieren (8-92)", 
"1-202Diagnostik zur Feststellung des irreversiblen Hirnfunktionsausfalls
Hinw.:Diese Kodes sind nur zu verwenden bei Diagnostik nach der jeweils gültigen Fortschreibung
der Richtlinie der Bundesärztekammer zur Feststellung des irreversiblen
Hirnfunktionsausfalls (siehe im Zusammenhang mit einer Organspende auch § 5 und § 16
Abs. 1 Satz 1 Nr. 1 Transplantationsgesetz)
Die durchgeführten Einzelmaßnahmen sind nicht gesondert zu kodieren"
]

CodePudding user response:

You can split on the assertion instead of a match, and update the pattern to a case insensitive variant with a negated character class:

^(?=[0-9]-[0-9]{2,3}(?![0-9])[^a-z\n]*[a-z])
^(?=\d-\d{2,3}(?!\d)[^a-z\n]*[a-z])

The first pattern matches:

  • ^ Start of string
  • (?= Positive lookahead
    • [0-9]-[0-9]{2,3}(?![0-9]) Match 1 digit - and then 2 or 3 digits not directly followed by a digit to the right of the current position
    • [^a-z\n]* Match optional chars other than a-z or a newline
    • [a-z] Match a char a-zA-Z
  • ) Close the lookahead

const regex = /^(?=[0-9]-[0-9]{2,3}(?![0-9])[^a-z\n]*[a-z])/mgi;
const str = `1-10 Klinische Untersuchung
1-100Klinische Untersuchung in Allgemeinanästhesie
Hinw.:Die Allgemeinanästhesie ist im Kode enthalten
Dieser Kode ist nur dann zu verwenden, wenn die Untersuchung unter Anästhesie als 
selbständige Maßnahme durchgeführt wird. Erfolgt in der gleichen Sitzung ein invasiver 
oder operativer Eingriff, der eine Anästhesie erfordert, ist die Untersuchung nicht gesondert 
zu kodieren
Untersuchung einzelner Körpersysteme
(1-20...1-33)
Hinw.:Das Anästhesieverfahren bei einer diagnostischen Maßnahme kann zusätzlich kodiert werden, sofern die 
diagnostische Maßnahme üblicherweise ohne Allgemeinanästhesie durchgeführt wird (8-90)
1-20 Neurologische Untersuchungen
Hinw.:Das neurologische Monitoring ist gesondert zu kodieren (8-92)
1-202Diagnostik zur Feststellung des irreversiblen Hirnfunktionsausfalls
Hinw.:Diese Kodes sind nur zu verwenden bei Diagnostik nach der jeweils gültigen Fortschreibung 
der Richtlinie der Bundesärztekammer zur Feststellung des irreversiblen 
Hirnfunktionsausfalls (siehe im Zusammenhang mit einer Organspende auch § 5 und § 16 
Abs. 1 Satz 1 Nr. 1 Transplantationsgesetz)
Die durchgeführten Einzelmaßnahmen sind nicht gesondert zu kodieren
1-202.0Bei einem potenziellen Organspender
Hinw.:Als Datum der Leistungserbringung ist das Datum anzugeben, an welchem mit der 
Diagnostik des irreversiblen Hirnfunktionsausfalls begonnen wurde
Nicht angegeben werden dürfen diese Kodes, wenn der Patient zu Lebzeiten einer möglichen 
Organspende widersprochen hat oder medizinische Kontraindikationen für eine 
Organspende vorliegen
.00Ohne Feststellung des irreversiblen Hirnfunktionsausfalls
.01Mit Feststellung des irreversiblen Hirnfunktionsausfalls`;

console.log(str.split(regex));

CodePudding user response:

I am not sure I am clear on when you want to split, so I make this assumtion:

  • split at a line that begins with N-M, where N is a single digit, and M are 2-3 digits, followed by a non-digit char

const input = `1-10 Klinische Untersuchung
1-100Klinische Untersuchung in Allgemeinanästhesie
Hinw.:Die Allgemeinanästhesie ist im Kode enthalten
Dieser Kode ist nur dann zu verwenden, wenn die Untersuchung unter Anästhesie als 
selbständige Maßnahme durchgeführt wird. Erfolgt in der gleichen Sitzung ein invasiver 
oder operativer Eingriff, der eine Anästhesie erfordert, ist die Untersuchung nicht gesondert 
zu kodieren
Untersuchung einzelner Körpersysteme
(1-20...1-33)
Hinw.:Das Anästhesieverfahren bei einer diagnostischen Maßnahme kann zusätzlich kodiert werden, sofern die 
diagnostische Maßnahme üblicherweise ohne Allgemeinanästhesie durchgeführt wird (8-90)
1-20 Neurologische Untersuchungen
Hinw.:Das neurologische Monitoring ist gesondert zu kodieren (8-92)
1-202Diagnostik zur Feststellung des irreversiblen Hirnfunktionsausfalls
Hinw.:Diese Kodes sind nur zu verwenden bei Diagnostik nach der jeweils gültigen Fortschreibung 
der Richtlinie der Bundesärztekammer zur Feststellung des irreversiblen 
Hirnfunktionsausfalls (siehe im Zusammenhang mit einer Organspende auch § 5 und § 16 
Abs. 1 Satz 1 Nr. 1 Transplantationsgesetz)
Die durchgeführten Einzelmaßnahmen sind nicht gesondert zu kodieren
1-202.0Bei einem potenziellen Organspender
Hinw.:Als Datum der Leistungserbringung ist das Datum anzugeben, an welchem mit der 
Diagnostik des irreversiblen Hirnfunktionsausfalls begonnen wurde
Nicht angegeben werden dürfen diese Kodes, wenn der Patient zu Lebzeiten einer möglichen 
Organspende widersprochen hat oder medizinische Kontraindikationen für eine 
Organspende vorliegen
.00Ohne Feststellung des irreversiblen Hirnfunktionsausfalls
.01Mit Feststellung des irreversiblen Hirnfunktionsausfalls`;

const result = input.split(/(?:^|[\n\r] )(?=\d-\d{2,3}[^d])/);
console.log(result);

Explanation of split regex:

  • (?:^|[\n\r] ) -- non-capture group for either the beginning of string or newlines (because of non-capture group the newlines are not in the resulting array)
  • (?=\d-\d{2,3}[^d]) -- positive lookahead for a digit, -, 2-3 digits, and a non-digit char
  • Related