Я пытаюсь извлечь два значения из произвольного текста, отформатированного различными способами. Эти два значения различны, и я хочу различить их на основе ближайшей строки, скажем, «ДДТ» и «ЭЭГ». Вот несколько примеров того, как строки могут быть отформатированы.
This contains 42.121% DDT and 2.1% EEG
Now with DDT: 12% EEG: 23.2%
47 DDT 22 EEG
EEG N/A DDT 43
5% EEG 20% DDT and more
По сути, мне нужно иметь возможность выбрать оба значения, перед которыми стоит их идентификатор, а затем
Я использовал | между двумя селекторами, чтобы захватить оба «случая» для каждого значения, но у меня возникли проблемы. Я хочу запретить регулярному выражению выбирать "12% ЭЭГ" во второй строке примера. Я пытаюсь использовать негативные взгляды и позитивные взгляды, но не могу заставить его работать.
Вот регулярное выражение для выбора просто ддт
(?<=eeg)(\d{1,3}\.?\d{1,6}).{,10}?ddt|ddt(?!.*eeg).{,10}?(\d{1,3}\.?\d{1,6})
Это самое близкое, что я получил, но все равно он не работает правильно. Эта версия не соответствует «20% ДДТ».
Мое оригинальное регулярное выражение не использовало lookbehinds, но в некоторых случаях также не работает.
(?:(?:(\d{1,3}\.?\d*)[^(?:eeg)]{0,10}?ddt)|(?:ddt[^(?:eeg)]{0,10}?(\d{1,3}\.?\d*)))
Мой оригинальный подход не распознает 23,2% строки ЭЭГ, отформатированные следующим образом. «ДДТ: 12% ЭЭГ: 23,2%»
Я не уверен, возможен ли этот тип селектора с регулярным выражением, но я хочу использовать регулярное выражение для векторизации этого извлечения. У меня есть функция, которая хорошо характеризует эти строки, но она очень медленная на больших наборах данных (~ 1 миллион записей). Регулярное выражение работает быстро и его легко применять к векторам, поэтому я хочу использовать его. Если есть другие предложения по решению этой проблемы с помощью функций NLP или numpy / pandas, я также открыт для них.