Как извлечь текст, начинающийся с определенного слова в строке? - PullRequest
0 голосов
/ 20 февраля 2019

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

1040 S. Vintage Ave.
Building A Ontario, CA 91761
United States Phone: 9099725134 Fax: 9099065401

Web: http://www.aareninc.com

Я хочу извлечь только текст, который идет перед словом 'Phone', поэтому только адрес.

Я пробовал с strip('Phone') и затем возьмите первый элемент массива, но он даст мне первую букву этой строки.

address = contacts.strip('Phone')
print(address[0])

Ответы [ 9 ]

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

Вы можете изначально разделить, чтобы получить список строк с обеих сторон "Телефон".Тогда вы захотите использовать полоску для удаления начальных и конечных пробелов.

contacts.split('Phone')[0].strip()

Это работает.

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

Вы можете использовать re.search():

import re

adress = re.search(r'^(.+?)\sPhone', s, flags=re.MULTILINE | re.DOTALL)
print(adress.group(1))

# 1040 S. Vintage Ave.
# Building A Ontario, CA 91761
# United States
0 голосов
/ 20 февраля 2019

с использованием регулярных выражений:

import re
re.split('(Phone)', strng)
['1040 S. Vintage Ave. Building A Ontario, CA 91761 United States ',
'Phone',
': 9099725134 Fax: 9099065401 Web: http://www.aareninc.com']
0 голосов
/ 20 февраля 2019

Предположим, что ваша строка определена как:

contacts = """1040 S. Vintage Ave.
Building A Ontario, CA 91761
United States Phone: 9099725134 Fax: 9099065401

Web: http://www.aareninc.com"""

contacts.split('Phone')[0] или contacts.partition('Phone')[0] должны дать вам тот же результат.

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

Учитывая, что у вас есть что-то подобное с вами

st = '1040 S. Vintage Ave.Building A Ontario, CA 91761 United States Phone: 9099725134 Fax: 9099065401 Web: http://www.aareninc.com'

v = st.split("Phone"))
print(v[0])

Это будет работать для Python3.Если вы используете Python2, вы можете избежать использования скобок с оператором print.

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

Надеюсь, это сработает.

Проверено на python 2.7

string = r"1040 S. Vintage Ave. Building A Ontario, CA 91761 United States Phone: 9099725134 Fax: 9099065401 Web: http://www.aareninc.com"

f = re.split(' (?=Phone:)', string)

print 'String before Phone:', f[0]
0 голосов
/ 20 февраля 2019

Для этой задачи вы можете использовать так называемое утверждение нулевой длины (в данном случае положительный прогноз)

import re
text = '''1040 S. Vintage Ave.
Building A Ontario, CA 91761
United States Phone: 9099725134 Fax: 9099065401 

Web: http://www.aareninc.com'''
adress = re.findall('.*(?=Phone)',text,re.DOTALL)[0]
print(adress)

output

1040 S. Vintage Ave.
Building A Ontario, CA 91761
United States

Обратите внимание, что оновызовет ошибку, если text не содержит подстроку Phone.Примечание re.DOTALL флаг, поэтому . также соответствует символу новой строки (/n), без этого флага вывод будет Unites States.

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

Как прокомментировал @JonClements, решение:

contacts.partition('Phone')[0]
0 голосов
/ 20 февраля 2019

Используйте функцию разделения, а не полосы.

address = contacts.split('Phone')
print(address[0]) 

Это должно работать.

...