Найти - Пользователи
Полная версия: RegExp
Начало » Python для новичков » RegExp
1
philips2009
Помогите пожалуйста!
Пытаюсь спарсить телефоны из файла с помощью рег. выражений, но безуспешно.
Инфа из файла:
—————————————–
109 Vasya Pupkin

Device (Owner name)

Photo
Apple iPhone 7 (XXX
XXX)
Phones

Phone number +35354354354

Data source Event Log


110 Andrey Trubkin

Device (Owner name)

Photo
Apple iPhone 7 (XXX
XXX)
Phones

Phone number +356854453645

Data source Event Log


111 Vanya Nogin

Device (Owner name)

Photo
Apple iPhone 7 (XXX
XXX)
Phones

Phone number +3735435321

Data source Event Log
————————————————-
Хотелось бы по данному шаблону:
Vasya Pupkin;+355435313
Andrey Trubkin;+353541321
Vanya Nogin;+3735435143251


ЗАРАНЕЕ БЛАГОДАРЮ!!!
krok64
Тут проще не регэкспом сделать а построчно читать этот файл и если находишь строку “Device (Owner name)” то из предыдущей выдираешь имя например так:
 " ".join(PredidushaiaStroka.split()[1:])
а если строка начинается на Phone number то выдираешь оттуда телефон, например вот так:
 "Phone number +37256818443".split()[2]
склеиваешь его с именем и записываешь куда надо. и так до конца файла.
Rodegast
Не нужно каждый раз сочинять регулярку, в интернете много готовых. Например:
 >>> re.findall(r"\+?[78][-\(]?\d{3}\)?-?\d{3}-?\d{2}-?\d{2}", "Vanya Nogin; +79261234567")
['+79261234567']
py.user.next
  
>>> import re
>>> 
>>> text = """
... 109 Vasya Pupkin
... 
... Device (Owner name)
... 
... Photo
... Apple iPhone 7 (XXX
... XXX)
... Phones
... 
... Phone number +359878576300
... 
... Data source Event Log
... 
... 
... 110 Andrey Trubkin
... 
... Device (Owner name)
... 
... Photo
... Apple iPhone 7 (XXX
... XXX)
... Phones
... 
... Phone number +359879283688
... 
... Data source Event Log
... 
... 
... 111 Vanya Nogin
... 
... Device (Owner name)
... 
... Photo
... Apple iPhone 7 (XXX
... XXX)
... Phones
... 
... Phone number +37256818443
... 
... Data source Event Log
... """
>>> 
>>> pat = r'\d+ (.+?)\n.*?Phone number ([+0-9]+).*?Data source Event Log'
>>> 
>>> out = re.findall(pat, text, re.DOTALL)
>>> out
[('Vasya Pupkin', '+359878576300'), ('Andrey Trubkin', '+359879283688'), ('Vanya Nogin', '+37256818443')]
>>>
philips2009
py.user.next
ОГРОМНОЕ СПАСИБО!!!
ВЫРУЧИЛ
philips2009
krok64
Тут проще не регэкспом сделать а построчно читать этот файл и если находишь строку “Device (Owner name)” то из предыдущей выдираешь имя например так:

А можешь прописать весь код, пожалуйста.
krok64
philips2009
А можешь прописать весь код, пожалуйста.
Можно, но зачем. Выше уже предложили вариант с регэкспом.
 fname='phones.txt'
with open(fname) as f:
    content = f.readlines()
for idx, line in enumerate(content):
	if line.startswith('Device'):
		 name=" ".join(content[idx-2].split()[1:])
	if line.startswith('Phone number'):
		print(name+";"+line.split()[2])
philips2009
krok64
  fname='phones.txt'
with open(fname) as f:
    content = f.readlines()
for idx, line in enumerate(content):
	if line.startswith('Device'):
		 name=" ".join(content[idx-2].split()[1:])
	if line.startswith('Phone number'):
		print(name+";"+line.split()[2])

работает отлично
СПАСИБО
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB