如何删除具有可变长度的字符串的一部分
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 中具有日期类型的列中删除时间部分?