LINUX.ORG.RU

регулярка (нет в ссылке) (python)

 ,


0

1

никогда не понимал, не понимаю и не пойму регулярок. :(

нужно, если ссылка (всегда вида a href="...") не содержит «/» в этом ..., заменить на #.

import re

text=re.sub('<a href="((?!/).*?)">(.*?)</a>', '<a href="#\\1">\\2</a><!--end-->\n',
"""
<a href="http://he/iii">iii</a> <a href="hello">hello</a> <a href="http://hello/oi">oi</a> <a href="hello2">hello2</a>
"""
)

print text

выводит

<a href="#http://he/iii">iii</a><!--end-->
 <a href="#hello">hello</a><!--end-->
 <a href="#http://hello/oi">oi</a><!--end-->
 <a href="#hello2">hello2</a><!--end-->
import re

text=re.sub('<a href="((?!/)*?)">(.*?)</a>', '<a href="#\\1">\\2</a><!--end-->\n',
"""
<a href="http://he/iii">iii</a> <a href="hello">hello</a> <a href="http://hello/oi">oi</a> <a href="hello2">hello2</a>
"""
)

print text

выводит

<a href="http://he/iii">iii</a> <a href="hello">hello</a> <a href="http://hello/oi">oi</a> <a href="hello2">hello2</a>

я уже что только не подсовывал, правда, не понимая, что именно - ничего не подходит :(



Последнее исправление: feofil (всего исправлений: 1)

In [7]: print re.sub('<a href="([^/]*?)">(.*?)</a>', '<a href="#\\1">\\2</a><!--end-->\n',
"""
<a href="http://he/iii">iii</a> <a href="hello">hello</a> <a href="http://hello/oi">oi</a> <a href="hello2">hello2</a> 
"""
)

<a href="http://he/iii">iii</a> <a href="#hello">hello</a><!--end-->
 <a href="http://hello/oi">oi</a> <a href="#hello2">hello2</a><!--end-->

Читай книжку Mastering Regular Expressions и пользуйся тулзами для отладки регекспов.

provaton ★★★★★
()
Последнее исправление: provaton (всего исправлений: 1)
Ответ на: комментарий от provaton

спасибо

книжки подобные уже больше 10 лет читаю, я их просто понимать не умею.

feofil
() автор топика

Я ННП, что тебе нужно, ТС.

Так что ли?

vadim@aquila:~$ irb
irb(main):001:0> t = '<a href="http://he/iii">iii</a> <a href="hello">hello</a> <a href="http://hello/oi">oi</a> <a href="hello2">hello2</a>'
=> "<a href=\"http://he/iii\">iii</a> <a href=\"hello\">hello</a> <a href=\"http://hello/oi\">oi</a> <a href=\"hello2\">hello2</a>"
irb(main):002:0> def f(x) ; x.gsub(/(<a\s+href\s*=\s*\")([^\/]+)(\"\s*>)/, '\1#\3') ; end
=> nil
irb(main):003:0> puts f(t)
<a href="http://he/iii">iii</a> <a href="#">hello</a> <a href="http://hello/oi">oi</a> <a href="#">hello2</a>
=> nil
irb(main):004:0> 

geekless ★★
()
Ответ на: комментарий от anonymous

Если хтмл достаточно валиден, то лучше именно так.

provaton ★★★★★
()
Ответ на: комментарий от provaton

пользуйся тулзами для отладки регекспов

Какую посоветуешь? Пробовал VisualREGEXP — показалась невменяемой. И регекспы там, если правильно помню, не питоньи.

varchar
()
Ответ на: комментарий от varchar

Да, важно чтоб синтаксис был такой, как тебе надо, так как нюансы порой сильно отличаются в разных реализациях. Для питоньих регекспов я юзаю kodos, правда он аж на QT3 и слабо вписывается в современные десктопные окружения. Еще есть вот такая штука, победнее, но зато устанавливать ничего не надо.

provaton ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.