2014-01-30 3 views
1

Я искал несколько часов, как сделать это особое волшебство регулярного выражения, мало что не везет.Регулярное выражение для анализа некоторых медицинских данных

Я занимаюсь анализом некоторых из моих собственных медицинских данных (почему бы и нет?), Который, к сожалению, приходит в виде очень неструктурированного текстового документа без тегов (XML или HTML).

В частности, в качестве прототипа я хочу только совместить то, что моя дельта LDL (изменение холестерина) в процентах.

В форме это проявляется в нескольких различных направлениях:

LDL change since last visit: 10% 

или

LDL change since last visit: 
10% 

или

LDL change since last visit: 

10% 

Я пытался сделать это в JavaScript, используя в течение нескольких часов (больше, чем я хочу признать) с небольшим успехом. Я отнюдь не эксперт RegExp, но я смотрел на выражение, как например:

(?<=LDL change since last visit)*(0*(100\.00|[0-9]?[0-9]\.[0-9]{0,2})%) 

Что я знаю, не работает в JS, потому что поддержка отсутствие для ?<=. Я тестировал их в Ruby, но даже тогда они не увенчались успехом. Может ли кто-нибудь мне поучаствовать в этом?

EDIT:

Поскольку эта конкретная метрика показывает вверх несколько раз в разных областях, я хотел бы регулярное выражение, чтобы соответствовать их все и они будут доступны в нескольких группах. Скажем, что соответствующая группа 0 соответствует профилю профиля липидов, а соответствующая группа 1 соответствует сводке.

Lipid profile 
... 
LDL change since last visit: 

10% 
... 

Summary of Important Metrics 
... 
LDL change since last visit: 10% 
... 

ответ

3

Решение lookbehind сложно, потому что большинство языков поддерживает только утверждения с фиксированной или конечной длиной lookbehind. Поэтому вместо этого проще использовать capturing group. (Кроме того, квантор * после того, как вы использовали, не имеет смысла).

И так как вы на самом деле не нужно, чтобы проверить номер (? Справа), я бы просто сделать

regexp = /LDL change since last visit:\s*([\d.]+)%/ 
match = regexp.match(subject) 
if match 
    match = match[1] 
else 
    match = nil 
end 

Если вы ожидаете несколько матчей в строке, используйте .scan():

subject.scan(/LDL change since last visit:\s*([\d.]+)%/) 
+0

ли есть способ изменить это регулярное выражение на получение каждого экземпляра в документе «Изменение LDL»? Некоторые из них показывают их в разных местах для разных вещей. Поэтому я хочу сгруппировать их в зависимости от заголовка. –

+0

Можете ли вы изменить свой вопрос, чтобы показать некоторые примеры? –

+0

Я сделал это. Спасибо за вашу помощь. –

Смежные вопросы