正则表达式 Python 日期的多个依赖项

Regex Python multiple dependencies for dates

我有非结构化数据,我必须在其中提取 BP 值和日期(具有不同的格式),如下所示。现在我有一个正则表达式函数来提取 Bp 值和日期后跟 BP 值。

我有一个具体案例,如图中突出显示的,其中日期后跟单词 'Recorded' 并且还有时间戳。

此外,还有一种情况是日期出现在 BP 值之前。我还需要提取那个日期和血压值。

目前,我的代码给出了 BP 值和遵循 BP 值的日期。现在我想要这个正则表达式以及如图所示的新案例来提取所有案例。

我附上了下面的正则表达式代码。

regex = r'\b(?:BP:?(?:-Sitting)?|Blood Pressure) \d+/\d+(?: \d+/\d+|  \d+/\d+)*(?: sm| -Lw| cB| Jr|\
    -aA| cs| -ic| ic| -RG|  kA| -sL| BL| kc| am| -sH| sH| es| ts| np| 8s| ca| Pm| JE| so| cp| v8| Eu| -cp|\
    Pm| EB| Fr| -Fr| -ms| -LN| -mT| -mk| -GF| -HO| Jp| wD| 8m| mc| -mc| Yr| -Lp| -ml| -LA| s/d| -aA| s/d|mmHg| mm Hg|\
    mm hg.|.?)?|B/P - (?:Sys|Dias)tolic \d+|(?:Sys|Dias)tolic Blood Pressure \d+ \w+\b'

当前输出的图像如下,其中不包括日期。

如果有人需要访问数据,我也附上了字符串格式的数据。

体重:188 磅,体重 124 磅(56.2 公斤),身高:108.2 厘米体重:20.9 公斤 BMI:18 与父亲、母亲同住。 ,Vials BP 120/75 Hu 52" We 202 I (916 kg) BMI 36.95 kg/m 354 2 mi ,W197 Ib 8 oz (44.2 kg) SpO2 99% BMI 19.69 kg/m2 BSA 1.36 m2,体重 316 公斤,身高:160 厘米 体重:79.6 公斤 BMI:31.09,血压 106/63 02/27/2019,B/P - 收缩压 104,B/P - 舒张压 72,BP-坐姿 109/70 mmHg,BP:左臂 101/72,正常袖带,2018 年 9 月 25 日坐姿 123/76,收缩压 100 mmHg,舒张压 68 mmHg,BP 128/80 128/81 128/82 128/83,疼痛等级 0 1-10 氧饱和度 % 95 % HR 83 /min BP 144/68 mm Hg Ht , . _ 重复 BP 130/80.Just 现在感觉她确定她感觉 FM.Plans 需要奶瓶喂养,血压 106/64s/d 78th / 77th percentileqyy Left Arm Sitting,Blood Pressure 114/76 s/d 77th goth percentileqyyy Right Arm Sitting,BP 130/82mmHg Pulse 78 Ht 1.753 m 5' 9" Wt 78.019 公斤 172 Ib BMI 25.39 kg/m2 ,BP 142/70 sm ,BP 129/87 -Lw ,BP 120/74 cB ,BP 150/80 Jr ,BP 128/80 104/58 120/84 136/ 78 ,nan,07/20/18 血压 112/54 , BP 10/30/17 1345 178/80 ,姓名 06/22/2018 06/22/2018 Bl ood Pressure 120/68 ,4/6/2015 BP 132/69 Patient Position,nan,nan, 血压 150/88 Recorded 08Dec2017 02 49PM , Blood Pressure 150/88 Recorded 08Dec2017 02 49PM , Blood Pressure 140/88 Recorded 15Nov2017 03下午 21 点'

如有任何帮助,我们将不胜感激。

您可以使用与指定情况匹配的交替来扩展模式,当 Recorded 位于左侧时匹配类似日期的模式,或者匹配 BP 或 [= 时类似日期的模式14=]在右边

(?<=Recorded )\d{1,2}[A-Za-z]{3}\d{4}\b|\d{1,2}/\d{1,2}/\d{2,}\b(?= BP| Blood Pressure)

更新后的模式看起来像

\b(?:BP:?(?:-Sitting)?|Blood Pressure) \d+/\d+(?: \d+/\d+|  \d+/\d+)*(?: sm| -Lw| cB| Jr|\
    -aA| cs| -ic| ic| -RG|  kA| -sL| BL| kc| am| -sH| sH| es| ts| np| 8s| ca| Pm| JE| so| cp| v8| Eu| -cp|\
    Pm| EB| Fr| -Fr| -ms| -LN| -mT| -mk| -GF| -HO| Jp| wD| 8m| mc| -mc| Yr| -Lp| -ml| -LA| s/d| -aA| s/d|mmHg| mm Hg|\
    mm hg.|.?)?|B/P - (?:Sys|Dias)tolic \d+|(?:Sys|Dias)tolic Blood Pressure \d+ \w+\b|(?<=Recorded )\d{1,2}[A-Za-z]{3}\d{4}\b|\d{1,2}/\d{1,2}/\d{2,}\b(?= BP| Blood Pressure)

Regex demo of the full pattern