繁体   English   中英

Python:如何查找和替换字符串中的所有变量名

Python: How to find and replace all variable names in a string

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我从前端得到一个字符串,例如

str='(A==1) & (B==\'A\') & (C>sin(2))'

这是最简单的格式,字符串可能要复杂得多。

我想在数据帧过滤中应用条件,例如

data = {'A': [1, 2, 3, 4],\
        'B': ['A','B','C','D'],\
        'C':[0.1,0.2,0.3,0.4]}
df=pd.DataFrame(data)
df_test=df[eval(str)]

为了完成这项工作,我必须在字符串中找到变量A,B,C ,并用df.A, df.B, df.C.替换它们。

我试过以下方法

import ast
names = [node.id for node in ast.walk(ast.parse(str)) if isinstance(node, ast.Name)]
print(names)

但它返回['C', 'A', 'B', 'sin']其中 'sin' 不是必需的。

我也尝试过pyparse但仍然无法弄清楚如何定义变量名的模式。

如果您能帮助我就如何查找和替换字符串中的变量名提供一些建议,我们将不胜感激?

1 个回复

您可以使用ast.NodeTransformer进行替换:

import ast
s = '(A==1) & (B==\'A\') & (C>sin(2))'
data = {'A': [1, 2, 3, 4], 'B': ['A', 'B', 'C', 'D'], 'C': [0.1, 0.2, 0.3, 0.4]}
class toDf(ast.NodeTransformer):
    def visit_Name(self, node):
       if node.id in data: #check if variable name exists in the data
           node = ast.Attribute(value=ast.Name(id='df'), attr=node.id)
       return node

new_s = ast.unparse(toDf().visit(ast.parse(s)))
print(new_s)

输出:

(df.A == 1) & (df.B == 'A') & (df.C > sin(2))
1 Python - 在字符串变量中查找并替换正则表达式子字符串

我有一个带有多行字符串的变量,我正在尝试用upside替换行test v1.0 ,但问题是我只是在整个行匹配模式时才尝试替换它,所以它不应该替换第一个test v1.0.1 我尝试使用re.sub并将'\\^test v1.0\\$'作为要替换的模式,但它不会替换任何内容。 我也尝试过 ...

3 如何查找和替换字符串中所有出现的子字符串?

我需要搜索一个字符串并编辑它的格式。 到目前为止,我可以替换第一次出现的字符串,但我无法用该字符串的下一次出现来替换。 这就是我的工作,有点: 如果它没有找到字符串,则根本不会打印任何内容,所以这不好。 我知道我需要遍历整个字符串 chartDataString 并替换所有出现的内容。 我 ...

6 在python中查找并替换字符串

我正在寻找使用python中的正则表达式替换文件中的字符串。 我想出的代码是 该文件包含两行,包含两个名称 但是它显示了一个错误。 我究竟做错了什么? ...

7 在Python中查找并替换字符串

我有一个像这样的字符串: 我想将此行替换为 问题是我不知道Student或其他任何字符串中的第一个和最后一个单词。 我的意思是它可以是Men , Women , Teacher 。 我只知道如果字符串中有small字母,我必须用该名称替换第一个和最后一个字并且短 有 ...

2013-05-07 14:03:19 4 186   python
8 如何在Python中从字典中替换变量列名称的一部分

在此示例数据帧中,包含3个变量: 经过一些操作后,以上数据框变为: 我想用原始数据帧中的列名替换"x0"变量。 例如, "x0_m"和"x0_f"应分别变为"A_m" , "A_f" 。 我为该过程确定了两个步骤: 步骤1:创建一个字典,其中将包含变量x和相应的列名 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM