替换字典中的缩写

时间:2014-11-25 22:56:43

标签: python regex csv dictionary replace

我有一个类似于this question的问题。但我还有一个问题。从下面的问题中获取相同的表格,我添加了几行。

A,B,C,D
RNA,lung cancer,15,biotin
RNA,lung cancer,15,biotin
RNA,breast cancer,15,biotin
RNA,breast cancer,15,biotin
RNA,lung cancer,15,biotin
65 y 4m,prostate cancer,biotin
m,lung cancer,biotin

使用另外三行引用相同的样本字典

rna,ribonucleic acid
rnd,radical neck dissection
rni,recommended nutrient intake
rnp,ribonucleoprotein
m,months
m,male
y,years

我想在逻辑上替换它,例如,一个数字后跟m(数字和字母之间有或没有空格' m'类似于' y' ;年)将是几个月,而后跟m或单个m的字符将是男性(而不是月份,因为月份中的m出现在字典中的第一个)。我希望我的最终输出是

A,B,C,D
ribonucleic acid,lung cancer,15,biotin
ribonucleic acid,lung cancer,15,biotin
ribonucleic acid,breast cancer,15,biotin
ribonucleic acid,breast cancer,15,biotin
ribonucleic acid,lung cancer,15,biotin
65 years 4months,prostate cancer,biotin
male,lung cancer,biotin

1 个答案:

答案 0 :(得分:0)

对于您要进行的每次替换,请定义模式和替换字符串。使模式捕获紧接在要替换的文本之前的文本。您可以在进行替换时使用该文本。像这样:

import re

month_pair = (re.compile('(\d\s*)m'), 'months')
year_pair = (re.compile('(\d\s*)y'), 'years')

def substitute(s, pairs):
  for (pattern, substitution) in pairs:
    match = pattern.search(s)
    if match:
      s = pattern.sub(match.group(1)+substitution, s)
  return s

pairs = [month_pair, year_pair]
print(substitute('65 y 4m', pairs))