2014-04-18 173 views
1

我需要一個正則表達式來查找Apache配置中的RequestReadTimeout指令中的maxtimeout值(以下爲40)。文件,例如:正則表達式使用Python正則表達式找到特定數字

RequestReadTimeout header=XXX-40,MinRate=XXX body=XXX 
RequestReadTimeout header=40 body=XXX 

PS:XXX指十進制數字

我用這個:

str="RequestReadTimeout header=10-40,MinRate=10 body=10" 
re.search(r'header=\d+[-\d+]*', str).group() 
'header=10-40' 

但我需要一個正則表達式在此只得到了maxtimeout值(40例如)在一行(不使用其他功能如吐(「 - 」)[1] ...等)。

謝謝。

回答

2

你最好部分你想提取:

re.search(r'header=(?:\d*-)?(\d+)', inputstr).group(1) 

(...)標記的基團,和類似的基團的位置處第1

開始編號一改變你的表達稍微僅捕獲包含數字和破折號可選的非捕獲組之後的數量,能夠匹配你正在尋找的兩種模式。 (?:...)非捕獲組組;它不會將匹配的文本存儲在一個組中,但卻允許您使用組中的?量詞將其標記爲可選。

Pythex demo

的Python會話:

>>> import re 
>>> for inputstr in ('RequestReadTimeout header=1234-40,MinRate=XXX body=XXX', 'RequestReadTimeout header=40 body=XXX'): 
...  print re.search(r'header=(?:\d*-)?(\d+)', inputstr).group(1) 
... 
40 
40 
+0

非常感謝! –

0

你可以用下面的regex做到這一點:

'RequestReadTimeout\sheader=(?:\d+)?-?(\d+).*'

捕獲的第一組\1是你想要的

演示:http://regex101.com/r/cD6hY0

+0

是否適合你很好的解決方案! –

+0

@TMR_OS,很高興能幫到你! – sshashank124