【问题标题】:Regex to find specific number using Python regex正则表达式使用 Python 正则表达式查找特定数字
【发布时间】:2014-04-18 10:04:57
【问题描述】:

我需要一个正则表达式来在 Apache 配置的 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] ...等)。

谢谢。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您将分组要提取的部分:

    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
    

    【讨论】:

      【解决方案2】:

      您可以使用以下regex

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

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

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

      【讨论】:

      • 为您提供不错的解决方案!
      • @TMR_OS,很高兴我能帮上忙!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多