Python 使用“替换字符串”时,替换除特定单词以外的所有字符串
我正在熊猫数据框中形成一个新列,我想输入操作系统的简称。 我正在使用正则表达式,需要精确匹配单词以从选择中排除,但是当我将正则表达式更改为不选择单词时,它会停止精确匹配。我在这里读了尽可能多的正则表达式精确匹配单词的文章,但没有一个解决方案是有效的 例如,我有如下数据:Python 使用“替换字符串”时,替换除特定单词以外的所有字符串,python,regex,pandas,str-replace,Python,Regex,Pandas,Str Replace,我正在熊猫数据框中形成一个新列,我想输入操作系统的简称。 我正在使用正则表达式,需要精确匹配单词以从选择中排除,但是当我将正则表达式更改为不选择单词时,它会停止精确匹配。我在这里读了尽可能多的正则表达式精确匹配单词的文章,但没有一个解决方案是有效的 例如,我有如下数据: Android 10kdsh Chrome OS Linux ddk2 OS X 10. Windows 7 iOS c Android Chrome Linux OS X Windows iOS 我希望它看起来像这样:
Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c
Android
Chrome
Linux
OS X
Windows
iOS
我希望它看起来像这样:
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”保留在同一行中
有人能帮忙吗
谢谢您可以将其中一个选项与新列匹配,而不是替换
webchat = pd.DataFrame(data, columns=["Operating System"])
webchat["OS"] = webchat["Operating System"].str.extract((r"^(Android|Chrome|Linux|OS X|Windows|iOS)\b"))
print(webchat)
输出
Operating System OS
0 Android 10kdsh Android
1 Chrome OS Chrome
2 Linux ddk2 Linux
3 OS X 10. OS X
4 Windows 7 Windows
5 iOS c iOS
使用@TheFirst bird的方法,我使用以下代码解决了这个问题:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.extract(r"(\bAndroid\b|\bOS X\b|\bChrome\b|\bLinux\b|\bWindows\b|\biOS\b)")
return webchat
要捕获准确的单词,需要单词周围的/b。这还不太清楚:您想用
OS X
保留X
,但您的“单词”列表既不包含OS X
,也不包含X
。你真正的需求是什么?另外,您是在从项目列表中创建动态模式之后,还是可以简单地按照下面的方式对其进行硬编码?抱歉,混淆了。编辑代码以包含OS X。我一定是在所有的试错过程中删除了它。我试图以特定的描述符结束,这样操作系统的列表更短,可以用于报告,而不是Windows 7、Windows 8.1等,它说的是Windows。我以前从未听说过“提取”。这似乎绝对是一种方式,而不是排除一切,除了我想说的话。但是,当我使用上面的代码运行它时,我仍然在OS col中获得一些额外字符。@MizzH其他哪些值提供了额外字符?