#python #string #for-loop #oop #substring
#python #строка #for-цикл #ооп #подстрока
Вопрос:
Привет, ребята, у меня есть две разные строки. Один из этих элементов — описание, а другой — шаблон.
Я хочу проверить, включен ли шаблон в описание.
Проблема в том, что я не могу просто сделать
if template in description:
print("template is included")
return True
else: raise Exception("exception test23")
Комментарии:
1. Используйте регулярное выражение для представления шаблона.
Ответ №1:
Чтобы преобразовать весь ваш шаблон в регулярное выражение, вам нужно будет экранировать его с помощью re.escape . Внутри этого выражения вы захотите, чтобы некоторые части рассматривались как подстановочные знаки, чтобы содержимое могло меняться в документе (например, «X» в скобках). Вы можете изменить экранированный шаблон, чтобы заменить заполнители выражениями, которые будут учитывать изменения:
Между вашим шаблоном и фактическим содержимым также есть несколько пробелов в пустых строках, которые создают невидимую разницу. Это может быть просто проблемой копирования / вставки, но на случай, если это законная разница, я внес дополнительные изменения в шаблон шаблона, чтобы игнорировать лишние пробелы в начале каждой строки.
import re
pattern = template.replace("[ ]","[CHECK]") # allow variable content between []
pattern = re.escape(pattern).replace("CHECK",r". ") # CHECK-->regular exp.
pattern = pattern.replace("n","n *") # for extra spaces at begining of lines
if re.search(pattern,document):
print("contains template")
else:
print("does not contain template")
вывод:
template="""<details>
<summary> <b>Technical Template</b>
</summary>
- [ ] Formal
##### Formal
- Is the document template used properly and consistently?
- Has the generated pdf file been checked?
##### Content
- Is the user documentation clear, correct and complete?
</details>"""
document = """| customer-check |/ |
| --- | --- |
<details>
<summary> <b> Completeness</b>
</summary>
- [x] Formal
</details>
<details>
<summary> <b>Technical Template</b>
</summary>
- [x] Formal
- [x] Content
##### Formal
- Is the document template used properly and consistently?
- Has the generated pdf file been checked?
</details>"""
# this prints: contains template
Комментарии:
1. Привет, спасибо за ваш вопрос, я не получаю никаких ошибок, поэтому он находит шаблон в моем документе. Чего я не понимаю: часть с ПОДСТАНОВОЧНЫМ знаком. Я попробовал это без и использовал ваш .replace(r»[ ]»,r»[. ]»), но я получаю синтаксическую ошибку @alain
2. E шаблон = re.escape(шаблон).replace.(r»[ ]»,r»[. ]») E ^ E Синтаксическая ошибка: недопустимый синтаксис
3. Там была неуместная обратная косая черта. Исправил это сейчас
4. ПОДСТАНОВОЧНАЯ часть состоит в том, чтобы иметь что-то, что не будет экранировано между скобками, чтобы заменить его на «. » проще после re.escape() добавляет кучу специальных символов. Побег
[WILDCARD]
производит[WILDCARD]
, но побег[ ]
производит[ ]
. Используя ключевое слово WILDCARD, вам не нужно будет знать, как re.escape выполняет свою работу.5. пробовал x = document.replace(«- [x]», «- [ ]»), так что, я думаю, это должно быть почти то же самое, но я все еще получаю сообщение об ошибке и все еще пытаюсь это сделать