使用正则表达式拆分为列

问题描述 投票:0回答:5

我迫切需要帮助,我想使用regex(python)将数据拆分为列,必须使用正则表达式

Jan  9 01:04:49 syntax sshd(pam_unix)[21354]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=120-123-141-4.hinet-ip.hinet.com  

Jul 10 04:17:11 syntax su(pam_unix)[95367]: session opened for user abc by (uid=0)

May  1 14:06:19 syntax su(pam_unix)[95367]: session closed for user abc

Oct 23 18:08:26 syntax logrotate: ALERT exited abnormally with [1]

Jun 14 21:42:52 syntax su(pam_unix)[95367]: session opened for user cbx by (uid=0)

假定的输出

“假定输出”“>

实际上来自URL,我将其制成pandas dataFrame,并尝试使用re.split,但它给了我错误

*ValueError: 1 columns passed, passed data had 24 columns*

希望我能得到我需要的输出吗?

我迫切需要帮助,我希望使用regex(python)将其拆分成几列,必须使用正则表达式Jan 9 01:04:49语法sshd(pam_unix)[21354]:authentication。 ..

python regex pandas valueerror
5个回答
1
投票

所以您可以像这样创建一个命名的正则表达式,


0
投票

下面的正则表达式可以分割语句。必填列将在捕获组中。


0
投票

刚开始时,“必须使用正则表达式”毫无道理没有任何意义-出于您的目的,找出几个拆分将变得更快,并且可能类似于它的健壮性。话虽这么说...


0
投票

如下使用正则表达式


0
投票

您需要将以下正则表达式模式与pandas.Series.str.findall()一起使用,以快速,轻松地获取它。

# regex pattern
pattern = '\s*(\w{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2})\s+(\S+)\s+(\S+?:)\s+(.*)'

# read log file
df = pd.read_csv('logfile.txt', header=None).rename(columns={0: 'logline'})
# process data
ds = df.logline.str.strip().str.findall(pattern)
a = np.array([list(e) for e in ds]).reshape(ds.size,-1)
# finalize processed data as a dataframe
df = pd.DataFrame(a, columns=['Timestamp', 'A1', 'A3', 'A3'])
print(df)
© www.soinside.com 2019 - 2024. All rights reserved.