Что может быть регулярным выражением для стандартного протокола стандарта ASTM?Регулярные выражения для строки протокола ASTM
"P|1||123456||^|||U" + ProtocolASCII.LF
+ "O|1||138||||||||||||O" + ProtocolASCII.LF
+ "R|1|^^^BE(B)||mmol/L||C||||||20150819144937" + ProtocolASCII.LF
+ "R|2|^^^BEecf||mmol/L||C" + ProtocolASCII.LF
+ "R|3|^^^Ca++|1.17|mmol/L" + ProtocolASCII.LF
Где ProtocolASCII.LF = '\n'
. Я пишу String парсер для извлечения данных из этой строки.
Я разделил строку на основе \n
, и теперь мне нужно проанализировать каждую строку, чтобы извлечь данные.
Есть ли регулярное выражение, чтобы я мог отображать и получать желаемый результат?
Строки P|1||123456||^|||U" + ProtocolASCII.LF
присутствует пациент, где число Р означает тег пациента или информацию о пациенте и является номером пациента.
Для строки R|3|^^^Ca++|1.17|mmol/L" + ProtocolASCII.LF
является результатом проведенного лабораторного испытания. Где R указано результат, ^^^ Ca ++ указывает имя результата, 1.17 это значение результата и ммоль/л представляет собой единицу.
В настоящее время я разборе строки, как:
String[] resultArray = dataString.split("[\\r\\n]+");
HashMap<String, Object> resultData = new HashMap<>();
List<Result> sampleResults = new ArrayList<>();
for (String res : resultArray) {
//Get first character of String
char startChar = res.charAt(0);
switch (startChar) {
case ProtocolASCII.STX:
//Handle Header information. This is special case
if (res.charAt(2) == ProtocolASCII.Alphabet.H
|| res.charAt(1) == ProtocolASCII.Alphabet.H) {
resultData.put(Key.MACHINE_INFO, getHeaderInfo(res));
//System.out.println(res.charAt(2));
}
break;
case ProtocolASCII.Alphabet.P:
resultData.put(Key.PATIENT, getPatientInfo(res));
break;
case ProtocolASCII.Alphabet.O:
resultData.put(Key.ORDER, getOrderInfo(res));
break;
case ProtocolASCII.Alphabet.R:
sampleResults.add(getResultInfo(res));
break;
case ProtocolASCII.Alphabet.L:
// TODO - Handle end of line
break;
}
}
Это мой полный ASTM протокол Строка:
/**
* Sample string
*/
public static final String MACHINE_STRING_ASTM = ProtocolASCII.STX + "1H|\\^&|||GEM 3000^5.6.1 ^21152^^023665^2.4|||||||||20150819154754" + ProtocolASCII.LF
+ "P|1||322061||^|||U" + ProtocolASCII.LF
+ "O|1||138||||||||||||O" + ProtocolASCII.LF
+ "R|1|^^^BE(B)||mmol/L||C||||||20150819144937" + ProtocolASCII.LF
+ "R|2|^^^BEecf||mmol/L||C" + ProtocolASCII.LF
+ "R|3|^^^Ca++|1.17|mmol/L" + ProtocolASCII.LF
+ "R|4|^^^Ca++(7.4)||mmol/L||C" + ProtocolASCII.LF
+ "R|5|^^^HCO23-||mmol/L||C" + ProtocolASCII.LF
+ "R|6|^^^HCO3std||mmol/L||C" + ProtocolASCII.LF
+ "R|7|^^^K+|5.0|mmol/L" + ProtocolASCII.LF
+ "R|8|^^^Na+|140|mmol/L" + ProtocolASCII.LF
+ "R|9|^^^SO2c||%||C" + ProtocolASCII.LF
+ "R|10|^^^TCO2||mmol/L||C" + ProtocolASCII.LF
+ "R|11|^^^THbc||g/dL||C" + ProtocolASCII.LF
+ "R|12|^^^Temp|37.0|C" + ProtocolASCII.LF
+ "L|1" + ProtocolASCII.EOT;
Есть ли способ, что я могу извлечь данные с помощью Regular Expressions?
Дайте мне знать, если требуется дополнительная информация.
Благодаря
Дайте нам четкую картину, что вы хотите получить от строк, когда она начинается с P, R, O, L соответственно ... тогда, возможно, не нужно понимать протокол ASTM, но дать вам решение ... скажем, , если строка начинается с P, что вы хотите проанализировать для остальной части строки, а также для R, O, L –
@Maverick_Mrt Я также упомянул об этом! Если он начинается с ** R **, нам нужно получить значения, кроме ** | **, потому что это разделитель. Пример: R | 3 | является результатом испытаний химического компонента ** Ca ++ **, имеющего значение ** 1,17 ** с единицей ** ммоль/л **. Итак, всякий раз, когда R | n | приходит, мне нужно, чтобы эти данные были извлечены. Заметим, что R | 4 | имеет все эти вещи, кроме ценности. –