我想从列表中的多个字符串中提取数值数据,例如,考虑以下字符串;
' \ 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位数字的数字数据。任何帮助都会非常感激。
答案 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
答案 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']