有没有办法删除字符串中标点符号的特定组合



我一直在迭代我刮到的汤,我需要的部分数据非常接近正确,但我就是无法将最后一部分清理干净。有没有简单的方法可以执行以下操作。

我尝试使用 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))

最新更新