我有一个列表,其中包含搜索和替换值。我正在尝试使用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 '
答案 0 :(得分:1)
您可以在此处使用以下正则表达式:
不幸的是,你必须为每个单词搜索一次,否则你会有重叠的匹配。
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