正则表达式使用Python正则表达式查找特定数字

时间:2014-04-18 10:04:57

标签: python regex

我需要一个正则表达式来在Apache config中的RequestReadTimeout指令中找到maxtimeout值(以下为40)。文件,例如:

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)(不使用其他函数,如spit(“ - ”)[1] ......等)。

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用以下regex

执行此操作

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

第一个捕获的组\1就是您想要的

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