Самый короткий путь, который я нашел, следующий:
MultiValueMap queryParams =
UriComponentsBuilder.fromUriString(url).build().getQueryParams();
UPDATE: UriComponentsBuilder
происходит из Spring. Здесь ссылка .
Подобный вопрос от назад в сентябре: , Как Вы переводите эту идиому регулярного выражения из Perl в Python?
Используя глобальные переменные в модуле, возможно, не лучший способ сделать это, но преобразование его в класс:
import re
class Re(object):
def __init__(self):
self.last_match = None
def match(self,pattern,text):
self.last_match = re.match(pattern,text)
return self.last_match
def search(self,pattern,text):
self.last_match = re.search(pattern,text)
return self.last_match
gre = Re()
if gre.match(r'foo',text):
# do something with gre.last_match
elif gre.match(r'bar',text):
# do something with gre.last_match
else:
# do something else
Вообще говоря, в этих видах ситуаций, Вы хотите сделать код "управляемым данными". Таким образом, поместите важную информацию в контейнер и цикл через нее.
В Вашем случае, важной информацией являются (строка, функция) пары.
import re
def fun1():
print('fun1')
def fun2():
print('fun2')
def fun3():
print('fun3')
regex_handlers = [
(r'regex1', fun1),
(r'regex2', fun2),
(r'regex3', fun3)
]
def example(string):
for regex, fun in regex_handlers:
if re.match(regex, string):
fun() # call the function
break
example('regex2')
У меня была та же проблема как Ваш. HereВґs мое решение:
import re
regexp = {
'key1': re.compile(r'regexp1'),
'key2': re.compile(r'regexp2'),
'key3': re.compile(r'regexp3'),
# ...
}
def test_all_regexp(string):
for key, pattern in regexp.items():
m = pattern.match(string)
if m:
# do what you want
break
ItВґs немного измененное решение из ответа информация об Извлечении из больших файлов структурированного текста
regex манипуляции для каждого подобные? Если так, попробуйте это:
for regex in ('regex1', 'regex2', 'regex3', 'regex4'):
match = re.match(regex, string)
if match:
# Manipulate match.group(n)
return result
Здесь Ваш regexs и соответствия не повторяются дважды:
match = re.match('regex1', string)
if match:
# do stuff
return
match = re.match('regex2', string)
if match:
# do stuff
return
Хм... Вы могли использовать что-то с with
конструкция... гм
class rewrapper()
def __init__(self, pattern, target):
something
def __enter__(self):
something
def __exit__(self):
something
with rewrapper("regex1", string) as match:
etc
with rewrapper("regex2", string) as match:
and so forth