Как кратко расположиться каскадом через несколько regex операторов в Python

Самый короткий путь, который я нашел, следующий:

MultiValueMap queryParams =
            UriComponentsBuilder.fromUriString(url).build().getQueryParams();

UPDATE: UriComponentsBuilder происходит из Spring. Здесь ссылка .

13
задан One Crayon 28 February 2009 в 04:06
поделиться

6 ответов

Подобный вопрос от назад в сентябре: , Как Вы переводите эту идиому регулярного выражения из 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
13
ответ дан 1 December 2019 в 18:55
поделиться

Вообще говоря, в этих видах ситуаций, Вы хотите сделать код "управляемым данными". Таким образом, поместите важную информацию в контейнер и цикл через нее.

В Вашем случае, важной информацией являются (строка, функция) пары.

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')
24
ответ дан 1 December 2019 в 18:55
поделиться

У меня была та же проблема как Ваш. 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 немного измененное решение из ответа информация об Извлечении из больших файлов структурированного текста

2
ответ дан 1 December 2019 в 18:55
поделиться

regex манипуляции для каждого подобные? Если так, попробуйте это:

for regex in ('regex1', 'regex2', 'regex3', 'regex4'):
    match = re.match(regex, string)
    if match:
        # Manipulate match.group(n)
        return result
0
ответ дан 1 December 2019 в 18:55
поделиться

Здесь Ваш regexs и соответствия не повторяются дважды:

match = re.match('regex1', string)
if match:
    # do stuff
    return

match = re.match('regex2', string)
if match:
    # do stuff
    return
0
ответ дан 1 December 2019 в 18:55
поделиться

Хм... Вы могли использовать что-то с 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
1
ответ дан 1 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: