Python - Извлечение текста в строке между двумя другими конкретными символами? - PullRequest
0 голосов
/ 28 июня 2018

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

FirstName LastName (Some Business Name / phoneNumber)
FirstName LastName (Business Name / phoneNumber)
FirstName LastName (BusinessName / differentphoneNumber)
FirstName LastName (Short Name / somephoneNumber)
FirstName LastName (Very Long Business Name / otherphoneNumber)

Примеры из реального мира могут выглядеть так:

David Smith (Best Pool and Spa Supplies / 07438473784)
Bessy McCarthur Jone (Dog Supplies / 0438-343522)

Я использовал этот код для извлечения имени (как мне было нужно раньше), и он хорошо работает:

import re
details = re.findall(r'^[\w+]+', input_data['stripeDescription'])
return {
'firstName': details[0] if details else None\``
}

Как найти текст между открывающей скобкой "(" и косой чертой "/", чтобы затем получить название компании?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Используйте скобки, чтобы сгруппировать шаблон, который вы хотите сопоставить, в регулярном выражении, которое вы используете для re.findall:

s = '''David Smith (Best Pool and Spa Supplies / 07438473784)
Bessy McCarthur Jone (Dog Supplies / 0438-343522)'''
import re
print(re.findall(r'\(([^/]+?) */', s))

Это выводит:

['Best Pool and Spa Supplies', 'Dog Supplies']
0 голосов
/ 28 июня 2018

Это довольно надежно, но не будет обрабатывать имя с круглыми скобками. то есть он ожидает, что первый ( будет разделен после имени. Тем не менее, вы можете узнать, что что-то не так, заметив, что в этом бизнесе есть \).*\(.

data = """
David Smith (Best Pool and Spa Supplies / 07438473784)
David Smith2 (Best Pool/Spa Supplies / 07438473784)
Bessy McCarthur Jone (Dog Supplies / 0438-343522)
Bessy McCarthur Jone2 (Dog (and cat) Supplies / 0438-343522)
Bessy (Bess, fails) McCarthur Jone3 (Dog Supplies / 0438-343522)
"""

lines = [line.strip() for line in data.splitlines() if line.strip()]

for line in lines:
    name,rest = line.split("(",1)
    name = name.strip()
    phone = rest.rsplit("/")[1].replace(")","").strip()
    biz = rest.rsplit("/",1)[0].strip()
    print("\n "+line)
    print(" =>name:%s: phone:%s:biz:%s:" % (name, phone,biz))

выход:

 David Smith (Best Pool and Spa Supplies / 07438473784)
 =>name:David Smith: phone:07438473784:biz:Best Pool and Spa Supplies:

 David Smith2 (Best Pool/Spa Supplies / 07438473784)
 =>name:David Smith2: phone:Spa Supplies:biz:Best Pool/Spa Supplies:

 Bessy McCarthur Jone (Dog Supplies / 0438-343522)
 =>name:Bessy McCarthur Jone: phone:0438-343522:biz:Dog Supplies:

 Bessy McCarthur Jone2 (Dog (and cat) Supplies / 0438-343522)
 =>name:Bessy McCarthur Jone2: phone:0438-343522:biz:Dog (and cat) Supplies:

 Bessy (Bess, fails) McCarthur Jone3 (Dog Supplies / 0438-343522)
 =>name:Bessy: phone:0438-343522:biz:Bess, fails) McCarthur Jone3 (Dog Supplies:
0 голосов
/ 28 июня 2018

Возможно, это не идеальное решение, но оно прекрасно работает:)

s1='David Smith (Best Pool and Spa Supplies / 07438473784)'
sp1=s1.split('(')
sp2=sp1[1].split('/')
print(sp2)

вывод: ['Best Pool and Spa Supplies', '07438473784)']

...