如何在python中使用正则表达式提取每行中需要的信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中使用正则表达式提取每行中需要的信息相关的知识,希望对你有一定的参考价值。
如题,有"temp.txt"文件,内容如下:
21899 6% S 15 173928K 38024K fg app_108 com.tencent.qq
21899 34% S 14 191436K 50888K fg app_108 com.tencent.qq
21899 49% S 14 183928K 41584K fg app_108 com.tencent.qq
21899 28% S 15 176984K 40240K fg app_108 com.tencent.qq
21899 6% S 15 177004K 40448K fg app_108 com.tencent.qq
21899 6% S 14 176048K 40564K fg app_108 com.tencent.qq
21899 10% S 14 176196K 40472K fg app_108 com.tencent.qq
21899 9% S 14 176232K 40712K fg app_108 com.tencent.qq
21899 12% S 14 176288K 40820K fg app_108 com.tencent.qq
21899 10% S 14 176288K 40820K fg app_108 com.tencent.qq
21899 12% S 16 179376K 40904K fg app_108 com.tencent.qq
如何提取出每行的百分比数值、两个内存占用值,并存储至'result.csv'中呢?
(如第一行提取“6%”,“173928”,“38024”三个值)
求大神指点!谢谢!
21899 34% S 14 191436K 50888K fg app_108 com.tencent.qq
21899 49% S 14 183928K 41584K fg app_108 com.tencent.qq
21899 28% S 15 176984K 40240K fg app_108 com.tencent.qq
21899 6% S 15 177004K 40448K fg app_108 com.tencent.qq
21899 6% S 14 176048K 40564K fg app_108 com.tencent.qq
21899 10% S 14 176196K 40472K fg app_108 com.tencent.qq
21899 9% S 14 176232K 40712K fg app_108 com.tencent.qq
21899 12% S 14 176288K 40820K fg app_108 com.tencent.qq
21899 10% S 14 176288K 40820K fg app_108 com.tencent.qq
21899 12% S 16 179376K 40904K fg app_108 com.tencent.qq'''
>>> open('a.txt','w').write(s)
>>> f=open('a.txt')
>>> f.read()
'21899 6% S 15 173928K 38024K fg app_108 com.tencent.qq\\n21899 34% S 14 191436K 50888K fg app_108 com.tencent.qq\\n21899 49% S 14 183928K 41584K fg app_108 com.tencent.qq\\n21899 28% S 15 176984K 40240K fg app_108 com.tencent.qq\\n21899 6% S 15 177004K 40448K fg app_108 com.tencent.qq\\n21899 6% S 14 176048K 40564K fg app_108 com.tencent.qq\\n21899 10% S 14 176196K 40472K fg app_108 com.tencent.qq\\n21899 9% S 14 176232K 40712K fg app_108 com.tencent.qq\\n21899 12% S 14 176288K 40820K fg app_108 com.tencent.qq\\n21899 10% S 14 176288K 40820K fg app_108 com.tencent.qq\\n21899 12% S 16 179376K 40904K fg app_108 com.tencent.qq'
>>> pprint.pprint(map(lambda x:re.findall('\\d+? +?(\\d+%) +?S +?\\d+? +?(\\d+K) +?(\\d+K)',x),s.split('\\n')))
[[('6%', '173928K', '38024K')],
[('34%', '191436K', '50888K')],
[('49%', '183928K', '41584K')],
[('28%', '176984K', '40240K')],
[('6%', '177004K', '40448K')],
[('6%', '176048K', '40564K')],
[('10%', '176196K', '40472K')],
[('9%', '176232K', '40712K')],
[('12%', '176288K', '40820K')],
[('10%', '176288K', '40820K')],
[('12%', '179376K', '40904K')]]
>>> pprint.pprint(map(lambda x:re.findall('\\d+? +?(\\d+%) +?S +?\\d+? +?(\\d+K) +?(\\d+K)',x),open('a.txt').read().split('\\n')))
[[('6%', '173928K', '38024K')],
[('34%', '191436K', '50888K')],
[('49%', '183928K', '41584K')],
[('28%', '176984K', '40240K')],
[('6%', '177004K', '40448K')],
[('6%', '176048K', '40564K')],
[('10%', '176196K', '40472K')],
[('9%', '176232K', '40712K')],
[('12%', '176288K', '40820K')],
[('10%', '176288K', '40820K')],
[('12%', '179376K', '40904K')]]
>>> 参考技术A import re
file_object = open('temp.txt')
try:
str = file_object.read( )
finally:
file_object.close( )
result = re.findall("(\\d+%) S\\s+\\d+ (\\d+)K\\s+(\\d+)K",str)
f = open("test.csv","w")
for line in result:
f.write("%s,%s,%s\\n"%(line[0],line[1],line[2]))
f.close()本回答被提问者采纳
如何使用正则表达式在python中提取子字符串
【中文标题】如何使用正则表达式在python中提取子字符串【英文标题】:How to extract substring in python using regular expression 【发布时间】:2018-03-25 03:27:49 【问题描述】:我有一个字符串,例如this is title [[this is translated title]]
,我需要提取这两个子字段。 this is title
, this is translated title
我尝试使用正则表达式,但无法完成。
def translate(value):
# Values are paseed in the form of
# "This is text [[This is translated text]]"
import re
regex = r"(.+)(\[\[.*\]\])"
match = re.match(regex, value)
# Return text
first = match.group(1)
# Return translated text
second = match.group(2).lstrip("[[").rstrip("]]")
return first, second
但这会失败。当字符串为“简单纯文本”时
【问题讨论】:
你所拥有的似乎有效。有什么问题? 【参考方案1】:我找到了一种不使用正则表达式的简单方法
def trns(value):
first, second = value.rstrip("]]").split("[[")
return first, second
【讨论】:
【参考方案2】:您必须使用正则表达式 r'((\w.*)\[\[(\w.*)\]\]|(\w.*))
在group(1)
中产生 this is title 并在 group(2)
中产生 this is translate title 所以您的代码应该是 p>
def translate(value):
# value = "This is text [[This is translated text]]"
import re
regex = r'((\w.*)\[\[(\w.*)\]\]|(\w.*))'
match = re.match(regex, value)
result = [x for x in match.groups() if x and x!=value]
return result if result else value
这会按预期返回。
要测试您的正则表达式,您可以使用this.
【讨论】:
我认为这会因 value="this is only text" 而失败以上是关于如何在python中使用正则表达式提取每行中需要的信息的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中使用正则表达式提取 JSON 字符串的特定部分?