【发布时间】:2021-03-15 15:06:28
【问题描述】:
我正在 Pandas 数据框中创建一个新列,我想输入操作系统的短名称。 我正在使用正则表达式,需要精确匹配要从选择中排除的单词,但是当我将正则表达式更改为不选择单词时,它会停止精确匹配。我在这里阅读了尽可能多的正则表达式完全匹配词帖子,但没有一个解决方案有效。
例如,我的数据如下所示:
Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c
我希望它看起来像这样:
Android
Chrome
Linux
OS X
Windows
iOS
我尝试了如下代码:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.replace(('[^(Android|^OS X|^Chrome|^Linux|^Windows|^iOS)]'),"", regex = True)
return webchat
但这会留下一些字符作为离开:
Androiddsh
ChromeOS
Linuxdd
OS X
Windows
iOS
显然以上只是例子,但部分字符留在单词中的原理是相同的。
我应该注意到,用 \b 框住单词并没有改变结果。如果我使用 $ 作为字符串的结尾,在“Android”的示例中,它仍然将“10kdsh”留在同一行
有人可以帮忙吗?
谢谢
【问题讨论】:
-
这不是很清楚:您希望将
X与OS X保持一致,但您的“单词”列表既不包括OS X,也不包括X。你真正的要求是什么?另外,您是在从项目列表创建动态模式之后,还是可以像下面的answer 那样简单地对它们进行硬编码? -
抱歉给您带来了困惑。编辑代码以包含 OS X。我必须在所有试验和错误过程中放弃它。我试图以特定的描述符结束,因此操作系统列表更短,可以用于报告,而不是 Windows 7、Windows 8.1 等,它说的是 Windows。
标签: python regex pandas str-replace