我一直在迭代我刮到的汤,我需要的部分数据非常接近正确,但我就是无法将最后一部分清理干净。有没有简单的方法可以执行以下操作。
我尝试使用 re 和 join,但都不起作用,因为标点符号的显示方式多种多样。
I want to turn this:
"['Coming To ', America]", "['Captain ', America, ': The Winter...']",
"[America, 'n Pie']", "[America, 'n Made']"
Into this:
'Coming To America', 'Captain America: The Winter...', 'American Pie',
'American Made'
由于您可能正在从文件中读取 python 代码,因此您应该使用 eval,因为这是计算所需内容的最通用方法。
这样可以避免每次出现新字符(例如制表符或括号)时添加新的替换行,但是如果您不小心正在执行的操作,这也会导致安全漏洞
eval
函数允许Python程序在自身内运行Python代码。
您需要定义变量America
以使其成为有效的python语句,然后您可以将其eval
到列表中,然后连接每个部分
s = ["['Coming To ', America]", "['Captain ', America, ': The Winter...']", "[America, 'n Pie']", "[America, 'n Made']"]
America = 'America'
for x in s:
print(''.join(eval(x)))
输出:
Coming To America
Captain America: The Winter...
American Pie
American Made
<</div>
div class="one_answers">在列表上使用map()
,对列表中的每个字符串使用filter()
:
lst = ["['Coming To ', America]", "['Captain ', America, ': The Winter...']",
"[America, 'n Pie']", "[America, 'n Made']"]
punct = set(list("[],'n"))
print(list(
map(lambda s: ''.join(filter(lambda c: c not in punct, s)), lst)
))
输出:
['Coming To America', 'Captain America : The Winter...', 'America n Pie', 'America n Made']
如果要删除其他字符,只需将它们添加到punct
为此使用 ast
可能有点过头了,但无论如何这里有一种方法:
import ast
# AST visitor that transforms names into strings
class NamesAsStrings(ast.NodeTransformer):
def visit_Name(self, node):
return ast.copy_location(ast.Str(
s=node.id,
ctx=node.ctx
), node)
ss = ("['Coming To ', America]",
"['Captain ', America, ': The Winter...']",
"[America, 'n Pie']",
"[America, 'n Made']")
visitor = NamesAsStrings()
strs = [''.join(ast.literal_eval(visitor.visit(ast.parse(s)).body[0].value)) for s in ss]
print(*strs, sep='n')
输出:
Coming To America
Captain America: The Winter...
American Pie
American Made
这仅在非字符串元素(此处America
)是有效的 Python 名称时才有效。但是,它的优点是可以正确处理字符串中的转义字符。
你想要的函数是字符串的replace
方法。
它的语法是这样的:
newString = oldString.replace("oldSubstring", "newSubstring")
因此,使用它来解决您的问题将如下所示:
a = ["['Coming To ', America]", "['Captain ', America, ': The Winter...']", "[America, 'n Pie']", "[America, 'n Made']"]
result = []
toRemove = ["', ", ", '", "'", "[", "]"]
for element in a:
b = element
for punct in toRemove:
b = b.replace(punct, "")
result.append(b)
print("n".join(result))