我似乎无法解决这个问题。我有许多不同的字符串,它们总是不同的。我需要更换它们的末端,但它们总是不同的长度。以下是几个字符串的示例:
string1 = "thisisnumber1(111)"
string2 = "itsraining(22252)"
string3 = "fluffydog(3)"
现在当我打印出来时,它当然会打印出以下内容:
thisisnumber1(111)
itsraining(22252)
fluffydog(3)
我希望打印的内容如下:
thisisnumber1
itsraining
fluffydog
我希望删除每个字符串括号中的部分,但我不知道长度总是在变化。谢谢
答案 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