2012-03-01 39 views
-1

假设你有串Python:操纵字符串的有效方法?

s1 = "('element1', 'element2', 'element3')" 

s2 = "(1A, 2A, 3A)" 

有一个简单的技术,你可以用它来转换

s1 to "(element1, element2, element3)" 

s2 to "(1, 2, 3)" 

对于s1,每个单引号需要消失,并且对于s2,每个A应该消失。什么是最直接的方式来做到这一点,只有这一点?

编辑 - >引号内的所有内容都是整个字符串的一部分......没有元组或任何变量。谢谢!

+2

是's1'应该是字符串' “( '部件1', 'element2的', '元素3')”',或者是三个字符串组成的元组? – 2012-03-01 23:20:19

+0

对不起,是的,他们是字符串,而不是元组!在这些例子中没有任何变量......它们实际上只是字符串的一部分.... – 2012-03-01 23:21:57

+0

您的规格不完整。请澄清你想要做什么:输入是什么,什么是预期的输出,最好是与他们的类型。另外,我不确定你是在寻找一种通用方法还是针对's1'和's2'的不同方法。 – 2012-03-01 23:23:41

回答

3

我认为s1s2应该是字符串

s1 = "('element1', 'element2', 'element3')" 
s2 = "(1A, 2A, 3A)" 

s1删除所有单引号,您可以使用

s1 = s1.replace("'", "") 

要删除信A的所有出现s2,使用

s2 = s2.replace("A", "") 

请注意,字符串不能在适当位置进行修改(它们是不可变的) - str.replace()将返回一个新字符串。

+0

谢谢,我不明白什么是所有的混乱,不幸...但是非常感谢您的帮助:) – 2012-03-01 23:36:29

2

我错过了什么吗?

>>> s1 = "('element1', 'element2', 'element3')" 
>>> s2 = "(1A, 2A, 3A)" 
>>> print s1.replace("'", "") 
(element1, element2, element3) 
>>> print s2.replace("A", "") 
(1, 2, 3) 
1

你不想在字符串域中进行这些操作。你真正想要的是将你的元素解析为一个字符串列表,将它们作为列表处理,然后将它们加入到一个字符串中。

您可能会发现以下功能有用。当然,如果攻击者控制了字符串(例如可以在任何地方插入',),请注意安全漏洞。

def tuplestringToList(s): 
    """ 
     "(AAAAA, BBBBB , CCCCC)" -> ["AAAAA", "BBBBB", "CCCCC"] 
    """ 
    assert s.startswith('(') 
    assert s.endswith(')') 
    return [fragment.strip() for fragment in s[1:-1].split(',')] 

def listToTuplestring(myList): 
    return '({})'.format(', '.join(myList)) 
+0

“...将元素合并到一个字符串中”,不应该将“...元素合并到一个字符串列表中”? – 2012-03-01 23:28:41

+0

@AdamParkin:谢谢 – ninjagecko 2012-03-01 23:32:08

0
>>> s1 = "('element1', 'element2', 'element3')" 
>>> result = ''.join([i for i in s1 if i != "'"]) 
>>> result 
'(element1, element2, element3)' 
>>> s2 = "(1A, 2A, 3A)" 
>>> result = ''.join([i for i in s2 if i != "A"]) 
>>> result 
'(1, 2, 3)'