gpt4 book ai didi

python - 在某个短语后切割字符串?

转载 作者:太空狗 更新时间:2023-10-29 19:32:18 24 4
gpt4 key购买 nike

我有一批字符串需要删减。它们基本上是一个描述符,后面跟着代码。我只想保留描述符。

'a descriptor dps 23 fd'
'another 23 fd'
'and another fd'
'and one without a code'

上面的代码是dps23fd。它们可以以任何顺序出现,彼此无关并且可能根本不存在(如最后一种情况)。

代码列表是固定的(或者至少可以预测),因此假设代码从未在合法描述符中使用,我如何在代码的第一个实例之后剥离所有内容。

我正在使用 Python。

最佳答案

简短的回答,正如@THC4K 在评论中指出的那样:

string.split(pattern, 1)[0]

其中 string 是您的原始字符串,pattern 是您的“中断”模式,1 表示拆分不超过 1 次,并且[0]表示取split返回的第一个元素。

在行动中:

>>> s = "a descriptor 23 fd"
>>> s.split("23", 1)[0]
'a descriptor '
>>> s.split("fdasfdsafdsa", 1)[0]
'a descriptor 23 fd'

这是表达我之前写的内容的一种更简短的方式,无论如何我都会保留在这里。

如果你需要删除多个模式,这是 reduce 内置的一个很好的选择:

>>> string = "a descriptor dps foo 23 bar fd quux"
>>> patterns = ["dps", "23", "fd"]
>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, string)
'a descriptor '
>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, "uiopuiopuiopuipouiop")
'uiopuiopuiopuipouiop'

这基本上是说:对于 patterns 中的每个 pat:获取 string 并重复应用 string.split(pat, 1) [0](如上所述),每次都对先前返回的值的结果进行操作。如您所见,如果字符串中没有任何模式,则仍会返回原始字符串。


最简单的答案是将列表/字符串切片与 string.find 相结合:

>>> s = "a descriptor 23 fd"
>>> s[:s.find("fd")]
'a descriptor 23 '
>>> s[:s.find("23")]
'a descriptor '
>>> s[:s.find("gggfdf")] # <-- look out! last character got cut off
'a descriptor 23 f'

更好的方法(避免在 s.find 返回 -1 时切断缺失模式中的最后一个字符)可能是包装在一个简单的函数中:

>>> def cutoff(string, pattern):
... idx = string.find(pattern)
... return string[:idx if idx != -1 else len(string)]
...
>>> cutoff(s, "23")
'a descriptor '
>>> cutoff(s, "asdfdsafdsa")
'a descriptor 23 fd'

[:s.find(x)] 语法表示从索引 0 到冒号右侧的字符串部分;在这种情况下,RHS 是 s.find 的结果,它返回您传递的字符串的索引。

关于python - 在某个短语后切割字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com