搜索和替换引用lis

2024-10-01 13:44:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含搜索和替换值的列表。我正在尝试使用for循环用string迭代列表,这会导致用其他值替换。任何帮助都将不胜感激

示例: 列表

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"

尝试的代码:

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 '

Tags: in列表forresmedsplitmemedical
1条回答
网友
1楼 · 发布于 2024-10-01 13:44:56

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

^{}

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

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

正则表达式解释:

(                        // 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

相关问题 更多 >