簡體   English   中英

如何刪除Python字符串中2個特定字符之后的字符?

[英]How to remove characters after 2 certain characters in a Python string?

可以說我有一堆字符串,它們只能采用以下格式:

format1 = 'substring1#substring2'
format2 = 'substring1$substring2'
format3 = 'substring1'

讓我解釋。 有時有時使用#$字符來分隔字符串。 但是其他時候卻不是。

我想刪除出現在#$之后的部分。 如果它只是一個特殊字符,即# ,我可以這樣做:

string = string.split('#')[0]

但是,如何快速而優雅地為2個特殊字符做呢? 還假設以下幾點:

  1. 字符串中只能出現一個特殊字符。
  2. 特殊字符將不會出現在字符串的任何其他部分。

謝謝。

常用表達。

import re
re.sub('[$#].*', '', string_to_modify)

使用正則表達式!

import re
new_string = re.sub(r"(#|$).*$", "", string)

如果要避免使用正則表達式,則一種可能性是:

string = min(string.split('#')[0], string.split('$')[0])

使用re.split()。

import re 
print(re.split("#|$","STRING#OTHER_STRING#OTHER_STRING_2"))

分割前使用替換

format1 = 'substring1#substring2'
format2 = 'substring1$substring2'
format3 = 'substring1'

print(format1.replace('#', '$').split('$')[0])
print(format2.replace('#', '$').split('$')[0])
print(format3.replace('#', '$').split('$')[0])

輸出量

substring1
substring1
substring1

您可以使用for循環來分隔任意數量的定界符。 正則表達式通常比Python str方法效率低。

def converter(x, delims='#$'):
    for delim in delims:
        x = x.split(delim, maxsplit=1)[0]
    return x

format1 = 'substring1#substring2'
format2 = 'substring1$substring2'
format3 = 'substring1'

for value in [format1, format2, format3]:
    print(converter(value))

# substring1
# substring1
# substring1

我認為您可以使用一個列表來維護可以使用的特殊字符,並在查找到每個字符時檢查字符串中是否存在特殊字符,當您執行拆分過程並僅檢索左側部分時,如下所示:

delimters = ["#","$"]

for symbol in delimters:
  if symbol in string1:
    left_part = string1.split(symbol)[0]

現在這種方法有一些缺點,但在我看來是最簡單的。 問題是,如果您有多個字符串,則需要嵌套循環。

暫無
暫無

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

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