簡體   English   中英

替換字符串Python的某些部分

[英]Replacing Certain Parts of a String Python

我似乎無法解決這個問題。 我有很多不同的字符串,而且它們總是不同的。 我需要替換它們的末端,但是它們的長度總是不同的。 這是幾個字符串的示例:

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

現在,當我打印出這些內容時,它當然會打印出以下內容:

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

我想要打印的內容如下:

thisisnumber1
itsraining
fluffydog

我希望刪除每個字符串的括號中的部分,但是我不知道長度總是在變化的意義。 謝謝

您可以為此使用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.rsplit拆分,而不是像str.split那樣str.split向右str.split 因此,我們在(上從右到左分割字符串,然后檢索索引0 (第一個元素)處的元素。這將是每個字符串末尾(...)之前的所有內容。

您的另一個選擇是使用正則表達式,它可以使您更精確地控制要獲取的內容。

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+\\)"是正則表達式,即您要查找的字符串的公式

.+表示匹配換行符(除了換行符)之外的任何一種或多種字符

\\d+表示匹配1個或多個數字

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

.+放在括號中會將字符串序列放在一組中,這意味着您希望以后可以使用一組字符。 我們不會將序列\\(\\d+\\)放在組中,因為我們不在乎那些字符。

regex.match(regex, string1).groups()給出string1中屬於組的每個子字符串。 由於只需要1個子字符串,因此只需訪問第0個元素。

如果您想了解更多, 這里有一個很好的關於正則表達式的教程。

由於您在評論中說:

“括號中所有的都是數字”

因此,您的括號之間總是有數字,我建議您看一下使用正則表達式模塊將其刪除的方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM