Как я могу получить часть соответствия regex как переменная в Python?

Вы могли использовать это в качестве грубого "ruleset":

ДА , используйте постоянные соединения, если:

  • существует только немного приложений/пользователей, получающих доступ к базе данных, т.е. Вы не будете приводить к 200 открытым (но вероятно бездействовать), соединения, потому что существует 200 различных пользователей, совместно использованных на том же хосте.
  • база данных работает на другом сервере, к которому Вы получаете доступ по сети
  • (одна) доступы к приложению база данных очень часто

НИКАКОЙ , не используйте постоянные соединения, если:

  • Ваше приложение только должно получить доступ к базе данных 100 раз в час.
  • у Вас есть много веб-серверов, получающих доступ к одному серверу базы данных
  • , Вы используете Apache в режиме перед ветвлением. Это использует одно соединение для каждого дочернего процесса, который может подъем справедливо быстро. (через @Powerlord в комментариях)

Используя постоянные соединения значительно быстрее, особенно если Вы получаете доступ к базе данных по сети. Это не имеет такого значения, если база данных работает на той же машине, но это все еще немного быстрее. Однако - поскольку имя говорит - соединение является персистентным, т.е. это остается открытым, даже если это не используется.

проблема с то есть, что в "конфигурации по умолчанию", MySQL только позволяет 1 000 параллельных "открытых каналов". После этого новым соединениям отказывают (Можно настроить эту установку). Таким образом, если Вы имеете - говорят - 20 веб-серверов с каждым 100 Клиентов на них, и у каждых из них есть всего доступ на одну страницу в час, простая математика покажет Вам необходимость в параллельных соединениях 2000 года с базой данных. Это не будет работать.

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

17
задан Lucas 26 November 2009 в 00:07
поделиться

6 ответов

См .: Объекты сопоставления регулярных выражений Python

>>> import re
>>> p = re.compile("lalala(I want this part)lalala")
>>> p.match("lalalaI want this partlalala").group(1)
'I want this part'
19
ответ дан 30 November 2019 в 10:08
поделиться

Если вы хотите получить детали по имени, вы также можете сделать это:

>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcom Reynolds")
>>> m.groupdict()
{'first_name': 'Malcom', 'last_name': 'Reynolds'}

Пример был взят из re docs

26
ответ дан 30 November 2019 в 10:08
поделиться
import re
astr = 'lalalabeeplalala'
match = re.search('lalala(.*)lalala', astr)
whatIWant = match.group(1) if match else None
print(whatIWant)

Небольшое примечание: в Perl, когда вы пишете

$string =~ m/lalala(.*)lalala/;

, регулярное выражение может соответствовать где угодно в строке. Эквивалент достигается с помощью функции re.search () , а не функции re.match () , которая требует, чтобы сопоставление с образцом начиналось с начала строки.

17
ответ дан 30 November 2019 в 10:08
поделиться
import re
data = "some input data"
m = re.search("some (input) data", data)
if m: # "if match was successful" / "if matched"
  print m.group(1)

Дополнительные сведения см. В документации .

4
ответ дан 30 November 2019 в 10:08
поделиться
import re
match = re.match('lalala(I want this part)lalala', 'lalalaI want this partlalala')
print match.group(1)
1
ответ дан 30 November 2019 в 10:08
поделиться

в регулярном выражении нет необходимости. думайте просто.

>>> "lalala(I want this part)lalala".split("lalala")
['', '(I want this part)', '']
>>> "lalala(I want this part)lalala".split("lalala")[1]
'(I want this part)'
>>>
2
ответ дан 30 November 2019 в 10:08
поделиться