【问题标题】:Regular Expression result don't match with tester正则表达式结果与测试仪不匹配
【发布时间】:2019-02-17 21:21:13
【问题描述】:

我是 Python 新手...

如果在谷歌上搜索几天后,我仍然无法正常工作。

我的脚本:

import re
pattern = '^Hostname=([a-zA-Z0-9.]+)'
hand = open('python_test_data.conf')
for line in hand:
    line = line.rstrip()
    if re.search(pattern, line) :
        print line

测试文件内容:

### Option: Hostname
#       Unique, case sensitive Proxy name. Make sure the Proxy name is known to the server!
#       Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=

Hostname=bbg-zbx-proxy

脚本结果:

ubuntu-workstation:~$ python python_test.py
Hostname=bbg-zbx-proxy

但是当我在测试器中测试正则表达式时,结果是:https://regex101.com/r/wYUc4v/1

我需要一些建议,但我只能得到 bbg-zbx-proxy 作为脚本输出。

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    您已经编写了一个正则表达式来捕获匹配的一部分,因此您也可以使用它。此外,将您的角色类更改为包含 - 并删除 line.strip() 调用,您的表达式没有必要。
    总的来说,这归结为:

    import re
    pattern = '^Hostname=([-a-zA-Z0-9.]+)'
    hand = open('python_test_data.conf')
    for line in hand:
        m = re.search(pattern, line)
        if m:
            print(m.group(1))
            #       ^^^
    

    【讨论】:

    • 经过测试。现在结果只有 'bbg'
    • 然后将- 添加到您的角色类中。
    【解决方案2】:

    简单的解决方案是在等号上拆分。您知道它将始终包含它,并且您将能够忽略拆分中的第一项。

    import re
    
    pattern = '^Hostname=([a-zA-Z0-9.]+)'
    hand = open('testdata.txt')
    for line in hand:
        line = line.rstrip()
        if re.search(pattern, line) :
            print(line.split("=")[1])   # UPDATED HERE
    

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多