我需要一个正则表达式来在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] ......等)。
感谢。
答案 0 :(得分:2)
您分组您要提取的部分:
re.search(r'header=(?:\d*-)?(\d+)', inputstr).group(1)
(...)
标记一个组,这样的位置组从1开始编号。
我稍微改变了你的表达式,只是在包含数字和短划线的可选非捕获组之后捕获数字,以匹配您正在寻找的两种模式。 (?:...)
是非捕获组;它不会将匹配的文本存储在组中,但允许您使用组上的?
量词来将其标记为可选。
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
就是您想要的