Python 在一次运行中替换字符串中的所有字符
我试图通过将字符串拆分成一个列表并对其进行迭代来替换字符串中的字符 我已经为所有需要替换为值的键创建了一个字典Python 在一次运行中替换字符串中的所有字符,python,string,dictionary,Python,String,Dictionary,我试图通过将字符串拆分成一个列表并对其进行迭代来替换字符串中的字符 我已经为所有需要替换为值的键创建了一个字典 dicta = { "eq" : "=", "gt" : ">", "lt" : "<" } s = "name eq 'alex' and age gt 36" [s.replace(char, dicta.get(char)) for char in s.split(" ") if char in dicta ] 这是因为我在一次字符更改后创
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
[s.replace(char, dicta.get(char)) for char in s.split(" ") if char in dicta ]
这是因为我在一次字符更改后创建了整个字符串
预期输出:[“姓名='alex'和年龄>36”]
如何在一次运行中完成此操作?尝试
减少:
from functools import reduce
dict = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
reduce(lambda x, y: x.replace(y, dict[y]), dict, s)
从functools导入reduce
dict={
“eq”:“=”,
“gt”:“>”,
“lt”:“尝试减少:
from functools import reduce
dict = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
reduce(lambda x, y: x.replace(y, dict[y]), dict, s)
从functools导入reduce
dict={
“eq”:“=”,
“gt”:“>”,
“lt”:“Regex解决方案:(这也将替换在equality
中的eq
中找到的键:=ality
)
重新导入
格言={
“eq”:“=”,
“gt”:“>”,
“lt”:“,
“lt”:“Regex解决方案:(这也将替换在equality
中的eq
中找到的键:=ality
)
重新导入
格言={
“eq”:“=”,
“gt”:“>”,
“lt”:“,
“lt”:“我认为,您的代码存在以下问题:
>>> s="name eq"
>>> s.replace('eq','=')
'name ='
>>> s.replace('name','Name')
'Name eq'
>>>
您必须保存第一次更换并将其用于第二次更换
代码:
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
d= s.split(" ")
for char in s.split(" "):
if char in dicta.keys():
s = s.replace(str(char), str(dicta.get(char)))
print s
"C:\Program Files (x86)\Python27\python.exe" C:/Users/punddin/PycharmProjects/demo/demo.py
name = 'alex' and age > 36
我认为,您的代码存在以下问题:
>>> s="name eq"
>>> s.replace('eq','=')
'name ='
>>> s.replace('name','Name')
'Name eq'
>>>
您必须保存第一次更换并将其用于第二次更换
代码:
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
d= s.split(" ")
for char in s.split(" "):
if char in dicta.keys():
s = s.replace(str(char), str(dicta.get(char)))
print s
"C:\Program Files (x86)\Python27\python.exe" C:/Users/punddin/PycharmProjects/demo/demo.py
name = 'alex' and age > 36
下面的示例替换运算符关键字的所有实例。它还确保忽略诸如equity之类的嵌入单词
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
words = s.split(" ")
result = []
for w in words:
result.append(dicta.get(w,w))
print(" ".join(result))
dicta={
“eq”:“=”,
“gt”:“>”,
“lt”:“以下示例替换运算符关键字的所有实例。它还确保忽略嵌入的单词,如equity
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
words = s.split(" ")
result = []
for w in words:
result.append(dicta.get(w,w))
print(" ".join(result))
dicta={
“eq”:“=”,
“gt”:“>”,
“lt”:“使用正则表达式和\b
匹配单词边界,这将避免替换单词相等
正则表达式匹配单词,若dicta中的键不匹配,将返回相同的单词
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
import re
ans = re.sub(r'\b({})\b'.format('|'.join(dicta.keys())), lambda x : dicta.get(x.group(0), x.group(0)), s)
### can try regex below also
# ans = re.sub(r'\b(\w+)\b', lambda x : dicta.get(x.group(0), x.group(0)), s)
# "name = 'alex' and age > 36"
dicta={
“eq”:“=”,
“gt”:“>”,
“lt”:“36”
使用正则表达式和\b
匹配单词边界,这将避免替换单词相等
正则表达式匹配单词,若dicta中的键不匹配,将返回相同的单词
dicta = {
"eq" : "=",
"gt" : ">",
"lt" : "<"
}
s = "name eq 'alex' and age gt 36"
import re
ans = re.sub(r'\b({})\b'.format('|'.join(dicta.keys())), lambda x : dicta.get(x.group(0), x.group(0)), s)
### can try regex below also
# ans = re.sub(r'\b(\w+)\b', lambda x : dicta.get(x.group(0), x.group(0)), s)
# "name = 'alex' and age > 36"
dicta={
“eq”:“=”,
“gt”:“>”,
“lt”:“36”
字典中的单词长度可能不总是2。在这种情况下,u可以将模式替换为“|”。join(dicta.keys()
正如您所评论的感谢您的努力,这也取代了像equity
到=uity
这样的词。我认为循环是最好的方式。我想您错过了\b
正则表达式,我已经编辑了使用dicta.keys()的答案字典中的单词长度可能不总是2。在这种情况下,u可以用“|”替换模式。join(dicta.keys()
正如您所评论的感谢您的努力,这也取代了像equity
到=uity
这样的词。我认为循环是最好的方式。我想您错过了\b
正则表达式,我已经编辑了使用dicta.keys()的答案