Как долго ваш конкретный кусок строки?
Сколько часов в день имеет ваша часть строки?
Знает ли ваша часть строки HTML или будет иметь чтобы быть изученным тоже?
Какой веб-сайт нужен вашей части струны? Просто покажите текст, возможно, блог или несколько фотографий? Или ваш кусочек строки должен также изучить программирование базы данных? Вы можете определить «интерактивный»?
Знание OO приятно, но вы можете сделать простой веб-сайт без него.
Если вы хотите, чтобы это действительно, действительно просто, то с любым хорошая книга, у вас не должно возникнуть проблем с декомпозицией сайта через месяц, но это «интерактивное» меня беспокоит.
Кстати, вы также можете посмотреть на языки программирования PHP, такие как Smarty, или взять систему CMS с тоннами функций (опрос, форумы, корзины покупок и т. д.) из http://www.cmsmatrix.org/
Но действительно существует «кусок строки» " тег ….
s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)
Вам не нужно escape
дважды, когда вы используете raw mode
.
Выход: ['123', '3.1415926']
Также тип возврата будет списком strings
.Если вы хотите, чтобы возвращаемый тип, как integers
и floats
, использовал map
import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))
Выход: [123, 3.1415926]
Здесь есть две вещи:
re.findall
возвращает захваченные тексты, если шаблон регулярного выражения содержит в нем группы захвата r'\\.'
в вашем шаблон соответствует двум последовательным символам, \
и любому символу, отличному от новой строки. См. ссылку findall
:
Если одна или несколько групп присутствуют в шаблоне, верните список групп; это будет список кортежей, если шаблон имеет более одной группы. Пустые совпадения включаются в результат, если они не касаются начала другого совпадения.
blockquote>Обратите внимание, что чтобы
re.findall
возвращали только совпадающие значения, вы обычно можете
- удаляет избыточные группы захвата (например,
(a(b)c)
->abc
)- преобразует все группы захвата в , не захватывая (то есть замените
(
на(?:
) , если отсутствуют обратные ссылки, которые относятся к значениям группы в шаблоне (см. ниже)- вместо
re.finditer
использовать[x.group() for x in re.finditer(pattern, s)]
)В вашем случае
findall
вернул все захваченные тексты, которые были пустыми, потому что вы\\
в [литерале] строкиr''
, которые пытались сопоставить литерал\
.Чтобы соответствовать номерам, вам нужно использовать
-?\d*\.?\d+
Регулярное выражение соответствует:
-?
- Дополнительный знак минус\d*
- Необязательные цифры\.?
- Дополнительный десятичный разделитель\d+
- 1 или более цифр.См. demo
Вот демон IDEONE :
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L)
ast
является крутым (хотя в OP не требуется). – Wiktor Stribiżew 10 August 2015 в 08:51@stribizhev, it's not, '3.1415926' should be a float number in the result
, поэтому я включил это в свой ответ :) – vks 10 August 2015 в 08:53