2015-10-30 4 views
1

Я программирую на python, и я пытаюсь очистить источник на веб-сайте. Например, я пытаюсь извлечь номер upc. Это только части страницы. Есть куча писем, цифр, символов, которые окружают upc.Извлечение части большой строки

myString = someLargeString + '<meta property=og:upc content=02276254215 />' + anotherLargeString 

Я думаю, что могу извлечь его, используя много расколов, но мне интересно, есть ли лучший способ. Я немного узнал об использовании findall и регулярных выражений, но я не уверен, что это можно применить здесь. Разделить был бы лучший способ сделать это?

Любая помощь или предложения были бы весьма признательны. Большое спасибо.

+0

Это единственное, что вы ищете? Если нет, вы можете посмотреть [BeautifulSoup] (https://pypi.python.org/pypi/beautifulsoup4). В противном случае достаточно простого регулярного выражения. –

+0

Есть еще несколько вещей, которые я хочу очистить, но это может быть полезно. Спасибо за это. Я посмотрю. – lclankyo

ответ

1

Регулярное выражение, вероятно, лучше, поскольку оно быстрее, проще в обслуживании и легче читать. Here's хороший учебник по регулярным выражениям, который вы, вероятно, должны прочитать, если вы собираетесь делать этот сайт синтаксическим анализом надолго.

В качестве примера, если вы хотите найти только один матч:

import re 

m = re.search('upc content=([0-9]*)', string) 
if m: 
    upc = m.group(1) 
    print upc 

Если вы собираетесь повторно использовать регулярное выражение, это, вероятно, хорошая идея прекомпилировать его заранее, как показано here

+0

Невероятно. Это было намного проще, чем я думал; Я слишком сильно задумывался над этим. Я прочитаю эту ссылку. Если могут быть или не быть буквы между номерами upc, например «02276abc254215», как мы могли бы извлечь все из цитаты? – lclankyo

+0

В [классе символов] (http://www.regular-expressions.info/charclass.html) вы можете указать все допустимые символы, которые может соответствовать классу. Поэтому просто расширьте его от '[0-9]' до '[0-9a-z]' или '[0-9a-zA-Z]'. –

+0

Думаю, я понимаю это сейчас. Я ценю помощь. – lclankyo

1
import re 

myString = '<meta property=og:upc content=02276254215 />' 

print(re.findall(r'upc\s+content=(\d+)',myString)) 

['02276254215'] 
1

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

myString = '<meta property=og:upc content=02276254215 />' 

FirstString = "content=" 
SecondString = " />" 

print(myString[myString.find(FirstString)+len(FirstString)+1: 
myString.find(SecondString)]) 

['02276254215'] 

Вы можете извлечь строку между FirstString и SecondString.

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