繁体   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