Результат регулярного выражения не совпадает с тестером - PullRequest
0 голосов
/ 18 февраля 2019

Я новичок в 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

Iнужен какой-то совет, как я могу получить только bbg-zbx-proxy как вывод сценария.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вы уже написали регулярное выражение, фиксирующее одну часть совпадения, так что вы можете использовать его тогда.Кроме того, измените класс вашего персонажа на - и избавьтесь от вызова 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))
        #       ^^^
0 голосов
/ 18 февраля 2019

Простым решением было бы разделить знак равенства.Вы знаете, что он всегда будет содержать это, и вы сможете игнорировать первый элемент в разделении.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...