Python, сравнивающий строки, проблема с конечными строками

#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]», «- [ ]»), так что, я думаю, это должно быть почти то же самое, но я все еще получаю сообщение об ошибке и все еще пытаюсь это сделать