使用 re 模块将与键匹配的字符串替换为字典中的值
Replacing a string matching to a key with the value in dictionary using re module
我有一个字符串“09 Mai 2022”。我正在尝试用字典中的值替换它
代码
import re
dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June",
"Juli":"July","August":"August","September":"September","Oktober":"October","November":"November",
"Dezember":"December"}
dict_comb = "|".join(dictionary)
date = '09 Mai.2022'
dates_fo = re.sub(dict_comb, dictionary[k] for k in dict_comb, date)
print(dates_fo)
预期输出
09 May. 2022
试试这个:
import re
dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June",
"Juli":"July","August":"August","September":"September","Oktober":"October","November":"November",
"Dezember":"December"}
pattern = '|'.join(dictionary.keys())
date = '09 Mai.2022'
dates_fo = re.sub(pattern, lambda m: dictionary.get(m.group(0)), date, flags=re.IGNORECASE)
输出:
>>> print(dates_fo)
09 May.2022
re.sub
第二个参数可能是函数,它应该接受 Match 对象作为参数,考虑下面的例子:
import re
changes = {'A':'1','B':'2','C':'3'}
def replacement(x):
return changes.get(x.group(0),'?')
text = 'ABCDEF'
print(re.sub(r'.',replacement,text))
产出
123???
在这里,我匹配任何单个字符 (.
) 并替换它的值 dict
如果其中存在这样的键,否则 ?
否则。
一种简单的方法是循环遍历字典中的键并用相应的值替换日期:
for k,i in dictionary.items():
date = re.sub(k,i, date)
输出:
print(date)
09 May.2022
您可以识别日、月和年的组,并将匹配的表达式替换为包含您的组的格式化字符串或相应的字典值:
import re
dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June",
"Juli":"July","August":"August","September":"September","Oktober":"October","November":"November",
"Dezember":"December"}
pattern = re.compile(r'(\d{1,2})\s+(\w+)\W(\d{4}|\d{2})')
date = '09 Mai.2022'
# print(re.findall(pattern, date))
dates_fo = re.sub(pattern,
lambda x: f"{x.group(1)} {dictionary.get(x.group(2), x.group(2))}. {x.group(3)}" ,
date)
print(dates_fo)
输出
09 May. 2022
编辑:此解决方案可能比其他解决方案更复杂,但在这种情况下,您可以为日期定义标准格式并在正则表达式中处理不同的情况。即,如果您的输入包含空格、点或您选择忽略的其他字符,您的输出格式将完全相同。
我有一个字符串“09 Mai 2022”。我正在尝试用字典中的值替换它
代码
import re
dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June",
"Juli":"July","August":"August","September":"September","Oktober":"October","November":"November",
"Dezember":"December"}
dict_comb = "|".join(dictionary)
date = '09 Mai.2022'
dates_fo = re.sub(dict_comb, dictionary[k] for k in dict_comb, date)
print(dates_fo)
预期输出
09 May. 2022
试试这个:
import re
dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June",
"Juli":"July","August":"August","September":"September","Oktober":"October","November":"November",
"Dezember":"December"}
pattern = '|'.join(dictionary.keys())
date = '09 Mai.2022'
dates_fo = re.sub(pattern, lambda m: dictionary.get(m.group(0)), date, flags=re.IGNORECASE)
输出:
>>> print(dates_fo)
09 May.2022
re.sub
第二个参数可能是函数,它应该接受 Match 对象作为参数,考虑下面的例子:
import re
changes = {'A':'1','B':'2','C':'3'}
def replacement(x):
return changes.get(x.group(0),'?')
text = 'ABCDEF'
print(re.sub(r'.',replacement,text))
产出
123???
在这里,我匹配任何单个字符 (.
) 并替换它的值 dict
如果其中存在这样的键,否则 ?
否则。
一种简单的方法是循环遍历字典中的键并用相应的值替换日期:
for k,i in dictionary.items():
date = re.sub(k,i, date)
输出:
print(date)
09 May.2022
您可以识别日、月和年的组,并将匹配的表达式替换为包含您的组的格式化字符串或相应的字典值:
import re
dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June",
"Juli":"July","August":"August","September":"September","Oktober":"October","November":"November",
"Dezember":"December"}
pattern = re.compile(r'(\d{1,2})\s+(\w+)\W(\d{4}|\d{2})')
date = '09 Mai.2022'
# print(re.findall(pattern, date))
dates_fo = re.sub(pattern,
lambda x: f"{x.group(1)} {dictionary.get(x.group(2), x.group(2))}. {x.group(3)}" ,
date)
print(dates_fo)
输出
09 May. 2022
编辑:此解决方案可能比其他解决方案更复杂,但在这种情况下,您可以为日期定义标准格式并在正则表达式中处理不同的情况。即,如果您的输入包含空格、点或您选择忽略的其他字符,您的输出格式将完全相同。