列的正则表达式

2024-09-30 04:28:39 发布

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

Dataframe 
   Ticket       Job
    RQ01    obe_fin_r3_003
    RQ02    ouk_log_r3_002_am

My Objective

它将从作业列中提取fin、日志并创建一个新的

My Code
df['job_type'] = df.short_description.str.findall(r'(\_\w+)').str[0]

这没有给出所需的输出,请建议使用正则表达式


Tags: logdataframedfmyjobamticketr3
3条回答

如果要匹配第一个下划线后的单词字符,则必须排除与_本身匹配的字符,该字符本身也与\w匹配

[^\W_]+_([^\W_]+)

解释

  • [^\W_]+匹配除_之外的1+字字符
  • _匹配_
  • ([^\W_]+)捕获组1中不带下划线的匹配1+字字符

使用str.extract从正则表达式的第一个匹配中提取组

import pandas as pd

strings = [
    ["RQ01", "obe_fin_r3_003"],
    ["RQ01", "ouk_log_r3_002_am"]
]
df = pd.DataFrame(data=strings, columns=["Ticket", "Job"])
df["job_type"] = df["Job"].str.extract(r'[^\W_]+_([^\W_]+)')
print(df)

输出

  Ticket                Job job_type
0   RQ01     obe_fin_r3_003      fin
1   RQ01  ouk_log_r3_002_am      log

您可以使用正则表达式,但始终可以使用.str.split()

df['New'] = df['Job'].str.split('_').str[1]

这将产生:

  Ticket                Job  New
0   RQ01     obe_fin_r3_003  fin
1   RQ02  ouk_log_r3_002_am  log

有了正则表达式,你可以试试这个

r'\_([a-z]+)\_'

相关问题 更多 >

    热门问题