Ответы пользователя по тегу Регулярные выражения
  • Как сформировать такой regexp?

    @throughtheether
    human after all
    Используйте модификатор жадности (?). Пример.
    Ответ написан
    Комментировать
  • Как с помощью python подсветить слова в документе не ломая DOM?

    @throughtheether
    human after all
    Навскидку, делал бы так:
    1) нашел бы интересующий элемент (текстовую ноду)
    2) обратился бы к его родителю (непосредственному предку)
    3) интересующий элемент разделил бы на три: до ключевого слова, ключевое слово и после него.
    4) запомнил бы индекс элемента из п. 1) среди потомков родителя из п. 2), удалил его, на его место вставил три потомка из п. 3), при чем средний из них должен быть обернут в span с нужным форматированием.
    UPD:
    не python, но посмотрите на этот проект.
    Ответ написан
    Комментировать
  • Python как очистить строку от пробелов и переносов строк?

    @throughtheether
    human after all
    >>> line='\n\n\n641717\n\site.ru\n60\n\nАктивен\n\n\n2005\n\n\n61%\n\n\n\n8%\n\n\n\n\n\n 12.59\n\n\n\n\n 414.63\n\n\n\n 4 712.49\n\n\n\n\n\n'
    >>> line
    '\n\n\n641717\n\\site.ru\n60\n\n\xc0\xea\xf2\xe8\xe2\xe5\xed\n\n\n2005\n\n\n61%\n\n\n\n8%\n\n\n\n\n\n 12.59\n\n\n\n\n 414.63\n\n\n\n 4 712.49\n\n\n\n\n\n'
    >>> import re
    >>> re.split(r'\s+',line)
    ['', '641717', '\\site.ru', '60', '\xc0\xea\xf2\xe8\xe2\xe5\xed', '2005', '61%', '8%', '12.59', '414.63', '4', '712.49', '']

    Пустые значения можете фильтровать при итерации по списку:
    for item in re.split(r'\s+',line):
        if item:
            pass

    или так:
    >>> re.split(r'\s+',line.strip())
    ['641717', '\\site.ru', '60', '\xc0\xea\xf2\xe8\xe2\xe5\xed', '2005', '61%', '8%', '12.59', '414.63', '4', '712.49']

    Использовал python 2.7.
    Ответ написан
    Комментировать
  • Как определить тип числа с помощью regexp?

    @throughtheether
    human after all
    Если отвлечься от регулярных выражений, то можно реализовать и так (Python 2.7):
    def foo(s):
        try:
            s_int=int(s)
            return s_int
        except ValueError:
            try:
                s_float=float(s)
                return s_float
            except ValueError:
                print "Incorrect string!"
    
    print foo('123')
    print foo('123.5')
    print foo('1e-10')
    print foo('toster')

    Из преимуществ такого подхода - поддерживается экспоненциальная запись (1e-10). Но я не уверен относительно производительности, и возможны другие нюансы.
    Ответ написан
    Комментировать