Удаление непечатаемых символов из строки в python?

Итак, в настоящее время я пытаюсь выяснить, сколько раз определенное слово появляется на странице.

Мой код Python имеет следующее:

print(len(re.findall(второй ответ, страница)))

0

После тщательного анализа я заметил, что print(secondAnswer) дает мне другой ответ «Тихий океан».

из print(ascii(secondAnswer)) 'Pacific'

У меня такое ощущение, что мое значение secondAnswer в len(re.findall(secondAnswer, page)) вместо этого использует «Pacific» и, таким образом, не находит совпадений на странице.

Может ли кто-нибудь дать мне какие-либо советы о том, как решить эту проблему?

Спасибо, Ник


person Nick L    schedule 30.11.2017    source источник


Ответы (1)


Символ Юникода fb01 — это фигура. То есть с точки зрения Python это один символ, но при отображении он отображается как два (связанных) символа.

Чтобы разложить лигатуры на отдельные символы, вы можете использовать unicodedata.normalize. . Например:

page = unicodedata.normalize("NFKD", page)

Или, в этом конкретном случае, вы можете написать свое регулярное выражение, чтобы принять лигатуру в качестве альтернативы последовательности символов fi, например, используя чередование с незахватываемой группой: paci(?:fi|fi)c.

person kindall    schedule 30.11.2017
comment
Не могли бы вы уточнить, что вы подразумеваете под тем, как я напишу свое регулярное выражение, чтобы принять лигатуру в качестве альтернативы последовательности символов fi. Извините, я новичок в программировании. - person Nick L; 01.12.2017
comment
Добавил это к моему ответу. - person kindall; 01.12.2017
comment
Спасибо, а куда мне поместить незахватывающую группу? Я использую PyCharm со своим скриптом. - person Nick L; 01.12.2017
comment
Я пробовал гуглить группы без захвата, но мало что понял. - person Nick L; 01.12.2017
comment
Это показано прямо в моем ответе. Конструкция (?:....) является незахватывающей группой. - person kindall; 01.12.2017
comment
Я понял. Спасибо! - person Nick L; 01.12.2017