我一直在遍历我刮过的汤,我需要的部分数据是如此接近正确,但是我无法清理最后一部分。请问有简单的方法吗?
由于标点符号的显示方式多种多样,我尝试使用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'
答案 0 :(得分:1)
在列表中使用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
答案 1 :(得分:1)
由于您可能正在从文件中读取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
答案 2 :(得分:1)
为此使用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名称时,此方法才有效。但是,它的优点是可以正确处理字符串中的转义字符。
答案 3 :(得分:0)
所需的函数是字符串的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))