我正在处理临床记录,并且作为预处理的一部分,我想用各种表达年龄的方法替换为单一的记号。例如,"患者是一名30岁的男性",我想用&#34替换它;患者是30岁的男性"。这个"岁的方式有很多种。是在临床记录中写的,我试图尽可能多地捕获它们。
我正在使用Python的re模块。目前我有:
# matches: y.o., y/o, years old. year old, yearold
s = re.sub(r'(\w*)y\.?\/?(o|ears|ear)\.? ?(old)? ?', r'\1 year_old ', s)
有了这个,我能够匹配:y.o.,岁,岁,岁,哟,y / o,24岁,24岁。不幸的是,只有"年"和"年"也匹配。所以,"九年前"变成九年前"。我想避免匹配"年"和"年"并匹配我指定的其他模式。我该怎么做?我的搜索告诉我,我必须使用负向前瞻,但我不知道该怎么做。
由于
答案 0 :(得分:3)
(\d+)(?: ?(?:years? ?old|y[ .\/]*o\.?))
(\d+)
将一个或多个数字捕获到捕获组1 (?: ?(?:years? ?old|y[ .\/]*o\.?))
符合以下条件
?
可选择匹配空格(数字与年前文字之间)(?:years? ?old|y[ .\/]*o\.?)
匹配以下任一项
years? ?old
匹配year
,可选地匹配s
,可选地匹配空格,匹配old
。所以它匹配以下内容:
years old
yearsold
year old
yearold
y[ .\/]*o\.?
匹配y
,然后匹配任意数量的空格.
或/
,然后o
,然后.
。所以它匹配以下(加上更多):
y.o.
y.o
yo
y/o
y/o.
y./o.
y o
y. o.
为了使其更匹配,您可以启用不区分大小写的i
标志,以便它也匹配大写变体,例如Y.O.
或Years Old
。