使用Python中的regex从字符串中提取数字数据

时间:2017-11-08 10:30:01

标签: regex python-3.x

我想从列表中的多个字符串中提取数值数据,例如,考虑以下字符串;

  

' \ nReplies:\ r \ n \吨\吨\吨\吨\吨\ r \ n \吨\吨\吨\吨\吨\ T20 \ r \ n \吨\吨\吨\ t \ t \ r \ n \ t \ t \ t \ t \ n查看:20,087 \ nRating0 / 5 \ n'

我想提取视图的数字数据,即20,087,同样适用于回复,即20

我使用python

使用以下正则表达式代码
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)

我得到以下输出;

  

观点:[(' 20',' 087')]

     

回复:[' 20']

但是,当我尝试为以下字符串运行相同的代码时出现问题;

  

' \ nReplies:\ r \ n \吨\吨\吨\吨\吨\ r \ n \吨\吨\吨\吨\吨\ T20 \ r \ n \吨\吨\吨\ t \ t \ r \ n \ t \ t \ t \ t \ n查看:208 \ nRating0 / 5 \ n'

我实际上得到一个空列表,这不是我想要的。另外,我在一个循环中运行整个事情,列出了34个不同的字符串。

    view = re.findall("\W*Views*:\D*(\d+)*,(\d+)", str(string_name))
    replies = re.findall("\W*Views*:\D*(\d+)", str(string_name))

所以,当我在一个循环中运行时,我得到以下输出,这不是我想要的!!

  

观点:[[(' 20',' 087')],[(' 44',' 467')], [(' 6',' 975')],[(' 43',' 287')],[],[], [],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[] ,[],[],[],[],[],[],[],[],[],[],[]]

因为,我错过了仅包含2-3位数字的数字数据。任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:0)

试试这个。

context.Table.Where(x => x.field == parameter).Delete();

答案 1 :(得分:0)

试试这个:

(\W\w)*[rR]eplies:(\W\w)*(?<replies>\d+)(\W\w)*[vV]iews:\s(?<views>\d+,?\d+).*

它会在单独的组中为您提供回复和观看次数: 例如。输入

'\nReplies:\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t20\r\n\t\t\t\t\t\r\n\t\t\t\t\nViews: 208\nRating0 / 5\n'

&#39;回复&#39;组:20

&#39;观点组:208

See it on regex101

答案 2 :(得分:0)

我建议在数字或逗号(\d)之后提取一个数字([\d,]*)和任何0+字符,以确保您在结果列表中获得整个格式化的数字:

view = re.findall(r"\bViews:\D*(\d[\d,]*)", string_name)
replies = re.findall(r"\bReplies:\D*(\d[\d,]*)", string_name)

请参阅Python demo

import re

string_names = ['\nReplies:\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t20\r\n\t\t\t\t\t\r\n\t\t\t\t\nViews: 208\nRating0 / 5\n',
                '\nReplies:\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t20\r\n\t\t\t\t\t\r\n\t\t\t\t\nViews: 20,087\nRating0 / 5\n']
for string_name in string_names:
    view = re.findall(r"\bViews:\D*(\d[\d,]*)", string_name)
    replies = re.findall(r"\bReplies:\D*(\d[\d,]*)", string_name)
    print("view = {}; replies = {}".format(view, replies))

输出:

view = ['208']; replies = ['20']
view = ['20,087']; replies = ['20']