如何删除具有可变长度的字符串的一部分

Posted

技术标签:

【中文标题】如何删除具有可变长度的字符串的一部分【英文标题】:How to remove a portion of a string with variable length 【发布时间】:2019-08-31 22:28:54 【问题描述】:

我有一个 DataFrame,其中一列是字符串的行,如下所示:

Received value 126;AOC;H3498XX from 602
Received value 101;KYL;0IMMM0432 from 229

我想删除(或不替换)第二个分号之后的部分,使其看起来像

Received value 126;AOC; from 602

但是我要删除的这部分将有不同且不可预测的长度(总是 A-Z 和 0-9 的组合)。分号和 froms 将始终存在以供参考。

我正在尝试通过研究此链接来使用正则表达式:https://docs.python.org/3/library/re.html

import re
for row in df[‘column’]:
    row = re.sub(‘;[A-Z0-9] from’ , ‘; from’, row)

我认为 [A-Z0-9] 未能包含我想要的可变长度方面。

【问题讨论】:

print(s.replace(s.split(";",2)[-1].split()[0],''))? 【参考方案1】:

使用str.replace()str.split() 的示例:

s = ['126;AOC;H3498XX from 602', '101;KYL;0IMMM0432 from 229']

for elem in s:
    print(elem.replace(elem.split(";",2)[-1].split()[0],''))

输出

126;AOC; from 602
101;KYL; from 229

编辑

同样适用于以下示例:

s = ['Received value 126;AOC;H3498XX from 602', 'Received value 101;KYL;0IMMM0432 from 229']

for elem in s:
    print(elem.replace(elem.split(";",2)[-1].split()[0],''))

输出

Received value 126;AOC; from 602
Received value 101;KYL; from 229

【讨论】:

这在我使用 print() 时非常有效,但我希望输出保留在我的数据框列中。当我在 s: s['column'] = elem.replace.. 中尝试使用 elem 时,它并没有给我预期的输出。您知道如何将输出保存在该数据框的列中吗? @EricN。您可以遍历所需的行并替换值:***.com/questions/25478528/…【参考方案2】:

使用模式(Received value \d+;[A-Z]+;)\w+(\s.*?)

例如:

import re

s = ["Received value 126;AOC;H3498XX from 602", "Received value 101;KYL;0IMMM0432 from 229"]

for i in s:
    print( re.sub(r"(Received value \d+;[A-Z]+;)\w+(\s.*?)", r"\1", i) )

输出:

Received value 126;AOC;from 602
Received value 101;KYL;from 229

【讨论】:

以上是关于如何删除具有可变长度的字符串的一部分的主要内容,如果未能解决你的问题,请参考以下文章

我想从字符串中删除部分字符串

如何自定义一个长度可变数组

如何从 s-s-rS 2008 中具有日期类型的列中删除时间部分?

如何在 TensorFlow 中处理具有可变长度序列的批次?

如何删除一定长度的字符串?

如何查找特定的数字长度,并使用 Notepad++ 删除/过滤其余部分?