患者信息表: Patients
+--------------+---------+ | Column Name | Type | +--------------+---------+ | patient_id | int | | patient_name | varchar | | conditions | varchar | +--------------+---------+ 在 SQL 中,patient_id (患者 ID)是该表的主键。 'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。 这个表包含医院中患者的信息。
查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1
。
按 任意顺序 返回结果表。
解题思路:
1.根据正则表达式-1
import re
# 有两种模式需要匹配,第一种是以DIAB1开头的字符均可以,第二种空格后是DIAB1
pattern = r'^DIAB1\w*|[\w*\s\w*]*\sDIAB1'
patients = patients[patients['conditions'].str.match(pattern)]
2.根据正则表达式-2
import re
# 单词边界(word boundary)指的是一个位置,它位于单词字符(字母、数字、下划线)和非单词字符之间。换句话说,它表示一个单词的开始或结束位置。
在正则表达式中,可以使用 \b 元字符来匹配单词边界。\b 可以出现在正则表达式的模式的开头或结尾,也可以出现在要匹配的文本中。
以下是一些示例说明单词边界的用法:
\bword\b:这个正则表达式匹配整个单词 'word',而不会匹配包含该单词的其他单词。
(\b|\s)word(\b|\s):这个正则表达式匹配独立的单词 'word',可以是作为一个单词的开头、结尾,或者前后有空白字符。
\b\d{3}\b:这个正则表达式匹配三位数的整数,确保其前后没有其他数字字符。
总之,单词边界在正则表达式中用于限定单词的开始和结束位置,可以帮助我们精确地匹配单词而不会匹配到其他部分。
patients = patients[patients["conditions"].str.contains(r"\bDIAB1", regex=True)]