2017-05-15 63 views
0

我想從聲明中提取淨利潤,並將「淨利潤」作爲非捕獲部分。不知道如何做到這一點(可以是非捕獲向後看?)在捕獲的正則表達式中無法捕獲python

'的淨利潤爲創業2350萬美元的

所需的O/P:

應用在F ollowing正則表達式:

(net|nt)\s*\.?\s*(profit|earnings)\s*\.?\s*\d+\.?\d*\.?\s*(?:lakh|crore|million) 

但是,它是給

[( '淨', '利潤')]

作爲輸出。

+0

是的,你有捕獲的組。你看過['re'模塊文檔](https://docs.python.org/3/library/re.html#regular-expression-syntax)並找到lookbehind斷言語法('(?<=。 ..)')呢? IIRC你不能在這樣的斷言中使用可變寬度模式('*')。也許你只是想讓團隊*不捕捉*(就像你之後放的團隊)? –

+1

您可以使用['ne?t \ s * \。?\ s *(?:利潤)\ s *(\。?\ s * \ d + \。?\ d * \??\ s *( ?:lakh | crore | million))'](https://regex101.com/r/7yw1pn/1) – anubhava

+0

Aditya,不[此答案](http://stackoverflow.com/a/43973389/3832970 )爲你工作? –

回答

2

嘗試用正則表達式下面你將得到的結果在第1組,

(?:ne?t\s(?:profit|earning)\s)([\d\.]+\s(?:million|laks|crore)) 

DEMO

1

可以使用(?:)非捕獲

s = 'business venture of net profit 23.5 million dollars' 
re.findall(r'(?:net|nt)\s*\.?\s*(?:profit|earnings)\s*\.?\s*(\d+\.?\d*)\.?\s*(lakh|crore|million)',s) 
[('23.5', 'million')] 
1

你沒有捕捉到digitgroup。你也需要用「網」和「利潤」

非捕獲組所以這應該工作:

編輯捕捉million..etc

import re 
s = 'business venture of net profit 23.5 million dollars' 
re.findall(r'(?:net|nt)\s*\.?\s*(?:profit|earnings)\s*\.?\s*(\d+\.?\d*)\.?\s*(lakh|crore|million)', s) 
# output: ['23.5', 'million'] 

例在: https://regex101.com/r/EXCzeV/2

+0

如何在輸出中包含「百萬」? –

+0

刪除相應的非捕獲組:'(lakh | core | million)' – Ludisposed