搜索和替换参考列表

时间:2018-05-31 17:59:37

标签: python python-2.7

我有一个列表,其中包含搜索和替换值。我正在尝试使用for循环使用字符串迭代列表,这导致重新替换为其他值。任何帮助将不胜感激。

示例: 列表

grp=["MEDICAL | MEDCL | MDCL | MEDICINE | MEDCL | ME | MEDICA | MDM | MEDI | M | MEDICIN | MEDIC | MEDICI / MED /"," CENTRA| CENTRE| CNTR| CTRS| CENTERS|CENTRAL | CENTER| CEN| CENT| CNTRS| CENTERR| CE| CT| CENTE| CENTERE / CTR /"," MAINE / ME /"]

输入:

str="CENTRAL MAINE MEDICAL CENTER"

预期产出:

"CTR ME MED CTR"

Code Tried:

for i in range(len(grp)):
    res_split=re.findall(r"[^/]+",grp[i])
    for x in res_split[0].split("|"):
        str = str.replace(x,res_split[1])

str

输出:

' CTR R R R R MED  MED CTR R R R R '

1 个答案:

答案 0 :(得分:1)

您可以在此处使用以下正则表达式:

(?:SEARCH_WORD).*?\/\s*(\w+)

不幸的是,你必须为每个单词搜索一次,否则你会有重叠的匹配。

import re

grp=''.join(["MEDICAL | MEDCL | MDCL | MEDICINE | MEDCL | ME | MEDICA | MDM | MEDI | M | MEDICIN | MEDIC | MEDICI / MED /"," CENTRA| CENTRE| CNTR| CTRS| CENTERS|CENTRAL | CENTER| CEN| CENT| CNTRS| CENTERR| CE| CT| CENTE| CENTERE / CTR /"," MAINE / ME /"])
s = "CENTRAL MAINE MEDICAL CENTER"

x = [re.findall(r'(?:{}).*?\/\s*(\w+)'.format(i), grp) for i in s.split()]
print(' '.join([j for i in x for j in i]))

# Result
CTR ME MED CTR

RegEx说明:

(                        // start of group 
  ?:                     // non-capture group
  SEARCH_WORD            // matches the search word
)                        // end of group
.*?                      // matches any character lazily
\/                       // matches a forward slash /
\s*                      // matches 0 or more whitespace characters
(                        // start of capture group 
  \w+                    // matches 1 or more word characters
)                        // end of capture group