Как мне сделать это регулярное выражение в Python? - PullRequest
2 голосов
/ 09 марта 2010

Предположим, у меня есть строка текста из всех символов на основе латинского алфавита. С пунктуацией.

Как мне «найти» все символы и поставить вокруг них <strong> теги?

hay = The fox jumped up the tree.
needle = "umpe"

В этом случае часть слова «прыгнул» будет выделена.

Ответы [ 5 ]

4 голосов
/ 09 марта 2010

Без регулярных выражений (может быть немного более многословным, но также более простым для понимания):

hay = "The fox jumped up the tree."
needle = "umpe"

print hay.replace(needle, "<strong>%s<strong>" % needle)

РЕДАКТИРОВАТЬ после дополнительной спецификации: , если вы хотите заменить без учета регистра (что не может сделать обычная замена строки):

import re

hay = "The fox jUMPed up the tree."
needle = "umpe"

regex = re.compile('(%s)' % needle, re.I)
print regex.sub('<strong>\\1</strong>', hay)
3 голосов
/ 09 марта 2010

Использование регулярных выражений в простом поисковом выражении, как это, излишне. Однако, если вам нужен более сложный поиск, я сослался на документацию по модулю Python , чтобы собрать приведенный ниже код, который, я думаю, делает то, что вы хотите:

#!/usr/bin/env python
import re
haystack = "The fox jumped up the tree."
needle = "umpe"
new_text = "<strong>" + needle + "</strong>"
new_haystack = re.sub(needle, new_text, haystack)
print new_haystack
1 голос
/ 09 марта 2010

Это должно работать:

pattern = r'(?P<needle>(umpe))'
pat_obj = re.compile(pattern)
new_text = pat_obj.sub(r'<strong>\g<needle></strong>', hay)

Результат, представленный в HTML: лиса j umpe d вверх по дереву.

В приведенном выше фрагменте я использовал метод re 'sub' и ссылался на захваченную группу (которую я назвал 'needle').

1 голос
/ 09 марта 2010

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

hay = "The fox jumped up the tree."
needle = "umpe"

hay_lower = hey.lower()
found = []
curr_find = hay_lower.find(needle.lower())
found.append(curr_find)
hay_list = list(hay)

while(curr_find):
    curr_find = hay_lower.find(needle.lower(), curr_find)

for found_index in found:
   hay_list[found_index:found_index+len(needle)] = '<strong>%s</strong>' % needle

result = ''.join(hay_list)
1 голос
/ 09 марта 2010

Ваш вопрос не очень понятен. Если вы хотите выделить слова, в которых есть иглы, вы можете выбрать

\b(\w*needle\w*)\b

и замените его на

<strong>\1<strong>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...