Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用“替换字符串”时,替换除特定单词以外的所有字符串_Python_Regex_Pandas_Str Replace - Fatal编程技术网

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其他哪些值提供了额外字符?