2017-09-15 58 views
-1

目前找到的模式后出现的文字,我的Python脚本是这样的:打印随后的组,使用Python

import re 
data = open('toy.json', 'r') 

for line in data: 
    m = re.search('\"gas\"', line) 
    if m: 
     found = m.group(0) 
     print(found) 

我的数据是这样的(这不是有效的JSON,这是为什么我用regex)对它进行分析:

{ 
    "blockNumber": "1941794", 
    "blockHash": "0x41ee74e34cbf9ef4116febea958dbc260e2da3a6bf6f601bfaeb2cd9ab944a29", 
    "hash": "0xf2b5b8fb173e371cbb427625b0339f6023f8b4ec3701b7a5c691fa9cef9daf63", 
    "from": "0x3c0cbb196e3847d40cb4d77d7dd3b386222998d9", 
    "to": "0x2ba24c66cbff0bda0e3053ea07325479b3ed1393", 
    "gas": "121000", 
    "gasUsed": "21000", 
    "gasPrice": "20000000000", 
    "input": "", 
    "logs": [], 
    "nonce": "14", 
    "value": "0x24406420d09ce7440000", 
    "timestamp": "2016-07-24 20:28:11 UTC" 
} 
{ 
    "blockNumber": "1941716", 
    "blockHash": "0x75e1602cad967a781f4a2ea9e19c97405fe1acaa8b9ad333fb7288d98f7b49e3", 
    "hash": "0xf8f2a397b0f7bb1ff212b6bcc57e4a56ce3e27eb9f5839fef3e193c0252fab26", 
    "from": "0xa0480c6f402b036e33e46f993d9c7b93913e7461", 
    "to": "0xb2ea1f1f997365d1036dd6f00c51b361e9a3f351", 
    "gas": "121000", 
    "gasUsed": "21000", 
    "gasPrice": "20000000000", 
    "input": "", 
    "logs": [], 
    "nonce": "1", 
    "value": "0xde0b6b3a7640000", 
    "timestamp": "2016-07-24 20:12:17 UTC" 
} 

我的脚本输出以下信息:

"gas" 
"gas" 

但事实上,我想要的东西更类似于此:

... 
"hash": "0xf2b5b8fb173e371cbb427625b0339f6023f8b4ec3701b7a5c691fa9cef9daf63",  
"gasUsed": "21000", 
"hash": "0xf8f2a397b0f7bb1ff212b6bcc57e4a56ce3e27eb9f5839fef3e193c0252fab26" 
"gasUsed": "21000" 
... 

我试图将其更改为输出随后group,但没有奏效。

+0

你没有在模式中定义任何组,这是它没有工作的原因。 0总是完全匹配,并且在此范围内,您可以通过在模式中使用圆括号来匹配组。 – marekful

+0

谁来定义组? –

回答

1

而不是打印found,你不能只打印你发现它的整个line

import re 
data = open('toy.json', 'r') 

for line in data: 
    m = re.search('\"(gas|hash)\"', line) 
    if m: 
     found = m.group(0) 
     print(line.strip()) 

我改变了正则表达式,所以它使用"(gas|hash)"

+0

niiiiiiiice :-) –