Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

Python 数据帧中的正则表达式

Python 数据帧中的正则表达式,python,regex,pandas,Python,Regex,Pandas,我有一个这样的数据框一个这样的列 COL1 RED[10%(INC)] RED[12%(INC)] 我想创建col2,如下所示 COL2 10 12 你能帮我找到好的regex吗? 我试过这个: RED\[(\d+\.\d+) %INC\] 但是它不会走。如果您想使用正则表达式并且只提取指定上下文中的数字,可以使用 df['COL2']=df['COL1'].str.extract(r'RED\[(\d+(?:\.\d+)?%\[INC]],expand=False) 看 详

我有一个这样的数据框一个这样的列

COL1      
RED[10%(INC)]
RED[12%(INC)]
我想创建
col2
,如下所示

COL2
10
12
你能帮我找到好的regex吗? 我试过这个:

RED\[(\d+\.\d+) %INC\]

但是它不会走。

如果您想使用正则表达式并且只提取指定上下文中的数字,可以使用

df['COL2']=df['COL1'].str.extract(r'RED\[(\d+(?:\.\d+)?%\[INC]],expand=False)

详细信息

  • 红色\[
    -一个
    红色[
    字符串
  • (\d+(?:\。\d+))
    -捕获组1:一个或多个数字,后跟一个点和一个或多个数字的可选序列
  • %\[INC]]
    -一个
    %[INC]]
    文本字符串
您还可以探索其他选项:

  • 提取后跟百分号的数字:
    df['COL1'].str.extract(r'(\d+(?:\。\d+))%,expand=False)
  • 使用
    [
    进行拆分,获取第二项并从中删除
    %
    df['COL1'].str.split(“[”).str[1].str.replace(“%”,”)

此解决方案使用
re.findall

模块和数据:

import pandas as pd
df = pd.DataFrame({'COL1':['RED[10%(INC)','RED[12%(INC)']})
解决方案:

df['COL2'] = df['COL1'].apply(lambda x: re.findall('[0-9]+', x))
df['COL2'] = pd.DataFrame(df['COL2'].tolist())

嗨!!非常感谢你,如果我有这样的红色[12%(/INC)](带/)@T.mum,你检查过“其他选项”吗?如果你有
,请帮我看一下。
/
没有必要逃跑。@viktor我试过
红色\[(\d+.\d+)%\(\/INC\]
但它不会走路,我不知道如何处理/之前的问题INC@T.mum输入中没有空格,为什么要在模式中添加空格?为什么不按照我在回答中显示的方式将小数部分设置为可选?请重新阅读正则表达式解释。使用
RED\[(\d+(?:\。\d+)%\(/INC\)]
。在Python字符串中,不需要转义斜杠,它们不是任何特殊的正则表达式元字符。