2016-12-25 6 views
2

Я прошел через каждое сообщение, которое мог найти на эту тему, и ничто не ответило на мою проблему;Извлечение целочисленных значений из строки на Python

Это код:
output = 'Scan results for BrainS (192.168.43.111) Scan results for Slave (192.168.43.107) Scan results for SlaveSmall (192.168.43.242)' while (True) if output[i].isdigit(): # i has initial value of 15, j=0 f[j]=output[i] j+=1 i+=1 elsif(i == len(output)): break else: i+=1 continue

Print:
>>>f ['1','9','2','1','6','8','4','3','1','1','1','0','0','0']

Как вы можете видеть, что я пытаюсь извлечь IP, как это с точки (в этом коде я не пытаюсь извлечь точки, но только цифры), я не могу понять, как получить строку, я хочу точно так, как это: F = 192.168.43.111

Любые предложения? лучшие команды?

+2

Regex ответ: http://stackoverflow.com/questions/10086572/ip-address-validation-in-python-using-regex – zemekeneng

ответ

0

Для нескольких пар скобок в строке я думаю, что лучше использовать регулярное выражение, например, так:

import re 

output = '''Scan results for BrainS (192.168.43.111) 
      Scan results for Slave (192.168.43.107) 
      Scan results for SlaveSmall (192.168.43.242)''' 

f = re.findall(r'\(([^()]+)\)',output) 
>>>['192.168.43.111', '192.168.43.107', '192.168.43.242'] 

Попробуй here!

+0

вау спасибо работает как шарм, как насчет если было несколько строк, подобных этому? но разные IP-адреса. то у меня будет несколько "(" & ")", есть ли решение? – eyal360

+0

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

+0

Я только что отредактировал его, я добавил фактический результат, который я получаю, я пытался его упростить раньше. Надеюсь, это поможет лучше понять мой вопрос. – eyal360

0

Здесь вы идете, этот код будет делать эту работу!

output = 'My computer IP is = (192.168.43.111) and yours not.' 
ip=[] 
ip_flag = False 

for x in output: 
    if x == '(': 
     ip_flag = True 
     continue 
    if ip_flag: 
     if x != ')': 
      if x != '.': # remove this line of you want the dots 
       ip.append(x) 
     else: 
      break 
print(ip) 
theIp="" 
for i in ip: 
    theIp+=i 
+1

Этот ответ на самом деле дал мне формирование ['1', '9', '2', ...], которое я не хотел первое место, но он работает хорошо. – eyal360

+1

@ eyal360, если вы хотите, чтобы точки удаляли эту строку 'if x! = '.':' , если вы хотите, чтобы строка просто добавляла петлю в конце, как это 'theIp =" " для i в ip: theIp + = i' сделано – Amjad

+1

Спасибо за помощь, приветствия! – eyal360

Смежные вопросы