正在为列中的字符串查找精确的正则表达式匹配项

2024-04-25 21:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的数据帧:

                         entityId  delta_approved_clockout
 (ID: 10)              247333605                      0.0  
  (ID: 20)               36738870                      0.0  
  (ID: 40)             4668036427                      0.0  
  (ID: 50)             1918647972                      0.0  
  (ID: 60)             4323165902                  44125.0  
  (ID: 80)              145512255                      0.0  
 Assigned (ID: 30)       42050340                      0.0  
 Assigned (ID: 40)   130880371376                      0.0  
 Assigning (ID: 30)    1095844753                      0.0  
 Cancelled (ID: 40)        937280                      0.0  
 Cancelled (ID: 80)   16857720813                      0.0  
 Planned (ID: 20)      9060392597                      0.0  
 Planning (ID: 10)   108484297031                      0.0  
 Processed (ID: 70)  133289880880                      0.0  
 Revoked (ID: 50)      2411903072                      0.0  
 Writing (ID: 50)    146408550024                      0.0  
 Written (ID: 60)    139458227923                1018230.0  

我希望结果只打印与(ID:10)完全匹配的正则表达式,使用这行我的输入包括“Planning(ID:10)”,这不是我需要的完全匹配。以下是总结结果:

^{pr2}$

我也尝试过正则表达式代码,结果为0,例如:

print input_data[input_data['last_status'].str.contains(r' ^(\(ID: \d+\))$', na=False)]

print input_data[input_data['last_status'].str.contains(r'^(\(ID: 10\))$', na=False)]

也许我对regex的理解还不够透彻,那么写regex的正确方法是什么呢?提前谢谢。在


Tags: 数据idfalseinputdatastatusregexlast
3条回答

正则表达式^{}

详细信息:

  • ^在行的开头断言位置
  • \s匹配任何空白字符
  • *匹配零时间和无限时间
  • [^]匹配列表中不存在的单个字符
  • +匹配一次和无限时间
  • \r\n匹配回车符和换行符(换行符)

Python代码

dataframe = """ (ID: 20)              247333605                      0.0  
  (ID: 50)               36738870                      0.0  
  (ID: 40)             4668036427                      0.0  
  (ID: 50)             1918647972                      0.0  
  (ID: 60)             4323165902                  44125.0  
  (ID: 10)              145512255                      0.0  
 Assigned (ID: 30)       42050340                      0.0  
 Assigned (ID: 40)   130880371376                      0.0  
 Assigning (ID: 30)    1095844753                      0.0  
 Cancelled (ID: 40)        937280                      0.0  
 Cancelled (ID: 80)   16857720813                      0.0  
 Planned (ID: 20)      9060392597                      0.0  
 Planning (ID: 10)   108484297031                      0.0  
 Processed (ID: 70)  133289880880                      0.0  
 Revoked (ID: 50)      2411903072                      0.0  
 Writing (ID: 50)    146408550024                      0.0  
 Written (ID: 60)    139458227923                1018230.0 """

def ID(id, data):
        return re.findall(r'^\s*\(ID:\s%s\)[^\r\n]+' % id, data, re.MULTILINE)

ID(10, dataframe) >> ['  (ID: 10)              145512255                      0.0  ']

你可以用

r'^\s*\(ID:\s*\d+\)\s*$'

the regex demo。在

模式匹配:

  • ^-字符串开头
  • \s*-零个或多个(*)空白字符
  • \(ID:-a(ID:子串
  • \s*-零个或多个(*)空白字符
  • \d+-1+位
  • \)-一个)字符
  • \s*-零个或多个(*)空白字符
  • $-字符串结束。在

如果您想得到整行代码,可以将regex更新为^{}

要捕获组中的(ID: 10),可以尝试^{}

相关问题 更多 >