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

时间:2019-01-31 16:34:29

标签: python python-3.x

我一直在遍历我刮过的汤,我需要的部分数据是如此接近正确,但是我无法清理最后一部分。请问有简单的方法吗?

由于标点符号的显示方式多种多样,我尝试使用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'

4 个答案:

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