Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一次运行中替换字符串中的所有字符_Python_String_Dictionary - Fatal编程技术网

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()的答案