替换字符串的某些部分

2024-04-18 23:17:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法解决这个问题。我有许多不同的弦,它们总是不同的。我需要更换他们虽然结束,但他们总是不同的长度。以下是一对字符串的示例:

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

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

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

不过,我希望打印的内容如下:

thisisnumber1
itsraining
fluffydog

我想它删除括号中的每一个字符串的一部分,但我不知道有什么意义的长度总是在变化。谢谢


Tags: 字符串示例内容括号意义string1string2string3
3条回答

你的另一个选择是使用正则表达式,它可以让你更精确地控制你想要得到什么。你知道吗

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+表示匹配一个或多个数字

\(\)是“(”和“)”字符

.+放在圆括号中会将该字符串序列放在一个组中,这意味着您希望以后能够访问该组字符。我们不把序列\(\d+\)放在一个组中,因为我们不关心那些字符。你知道吗

regex.match(regex, string1).groups()给出string1中属于组的每个子串。因为您只需要1个子字符串,所以只需要访问第0个元素。你知道吗

如果您想了解更多,在教程的点here上有一个很好的正则表达式教程。你知道吗

您可以使用^{}来实现:

>>> 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处的元素(第一个元素)。这将是每个字符串末尾的(...)之前的所有内容。你知道吗

既然你在评论中说:

"all that will be in the parentheses will be numbers"

因此,paren之间总是有数字,我建议您使用正则表达式模块来删除它们:

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

相关问题 更多 >