替换字符串Python的某些部分

时间:2014-10-14 00:39:31

标签: python string

我似乎无法解决这个问题。我有许多不同的字符串,它们总是不同的。我需要更换它们的末端,但它们总是不同的长度。以下是几个字符串的示例:

string1 = "thisisnumber1(111)"
string2 = "itsraining(22252)"
string3 = "fluffydog(3)"

现在当我打印出来时,它当然会打印出以下内容:

thisisnumber1(111)
itsraining(22252)
fluffydog(3)

我希望打印的内容如下:

thisisnumber1
itsraining
fluffydog

我希望删除每个字符串括号中的部分,但我不知道长度总是在变化。谢谢

3 个答案:

答案 0 :(得分:4)

您可以使用str.rsplit

>>> string1 = "thisisnumber1(111)"
>>> string2 = "itsraining(22252)"
>>> string3 = "fluffydog(3)"
>>>
>>> string1.rsplit("(")
['thisisnumber1', '111)']
>>> string1.rsplit("(")[0]
'thisisnumber1'
>>>
>>> string2.rsplit("(")
['itsraining', '22252)']
>>> string2.rsplit("(")[0]
'itsraining'
>>>
>>> string3.rsplit("(")
['fluffydog', '3)']
>>> string3.rsplit("(")[0]
'fluffydog'
>>>

str.rsplit将字符串从右向左分割,而不是从左向右分割,如str.split。因此,我们在(上从右到左分割字符串,然后在索引0(第一个元素)处检索元素。这将是每个字符串末尾(...)之前的所有内容。

答案 1 :(得分:1)

您的另一个选择是使用正则表达式,这可以让您更精确地控制您想要获得的内容。

import re
regex = regex = r"(.+)\(\d+\)"

print re.match(regex, string1).groups()[0] #returns thisisnumber1
print re.match(regex, string2).groups()[0] #returns itsraining
print re.match(regex, string3).groups()[0] #returns fluffydog

分析发生了什么:

regex = r"(.+)\(\d+\)"是正则表达式,是您尝试查找的字符串的公式

.+表示匹配除换行符之外的任何类型的1个或多个字符

\d+表示匹配1位或更多位

\(\)是"("和")"字符

.+放在括号中会将该字符串序列放入一个组中,这意味着该组字符是您希望以后能够访问的字符组。我们不会将序列\(\d+\)放在一个群组中,因为我们并不关心这些角色。

regex.match(regex, string1).groups()string1中的每个子字符串提供属于组的一部分。由于您只需要1个子字符串,因此只需访问第0个元素。

如果您想了解更多信息,可以在Tutorial&#39点here上找到关于正则表达式的精彩教程。

答案 2 :(得分:0)

因为你在评论中说:

  

"括号中的所有内容都是数字"

所以你的parens之间总是有数字,我建议你看一下使用正则表达式模块删除它们:

import re

string1 = "thisisnumber1(111)"
string2 = "itsraining(22252)"
string3 = "fluffydog(3)"

strings = string1, string2, string3

for s in strings:
    s_replaced = re.sub(
        r'''
        \( # must escape the parens, since these are special characters in regex
        \d+ # one or more digits, 0-9
        \)
        ''', # this regular expression will be replaced by the next argument
        '', replace the above with an empty string
        s, # the string we're modifying
        re.VERBOSE) # verbose flag allows us to comment regex clearly
    print(s_replaced)

打印:

thisisnumber1
itsraining
fluffydog