Проблема, как было отмечено ранее в комментариях, заключается в том, что модуль docx несовместим с Python 3. Он был исправлен в этом pull-request на github: https://github.com/mikemaccana/python- docx / pull / 67
Поскольку исключение теперь встроено, решение не должно импортировать его.
docx.py
@@ -27,7 +27,12 @@
except ImportError:
TAGS = {}
-from exceptions import PendingDeprecationWarning
+# Handle PendingDeprecationWarning causing an ImportError if using Python 3
+try:
+ from exceptions import PendingDeprecationWarning
+except ImportError:
+ pass
+
from warnings import warn
import logging
В PHP регулярное выражение должно быть заключено внутри пары разделителей . Разделителем может быть любой небуквенный символ, не обратный слэш, не-пробельный символ; /
, #
, ~
являются наиболее часто используемыми. Обратите внимание, что также можно использовать ограничители стиля скобок, где открывающие и закрывающие скобки являются начальным и конечным разделителями, то есть <pattern_goes_here>
, [pattern_goes_here]
и т. Д. Все действительны.
« Неизвестная ошибка модификатора X "обычно возникает в следующих двух случаях:
В этом случае регулярное выражение равно <div[^>]*><ul[^>]*>
. Механизм регулярных выражений рассматривает все от <
до >
как шаблон регулярного выражения, а затем все как модификаторы.
Regex: <div[^> ]*><ul[^>]*>
│ │ │ │
└──┬──┘ └────┬─────┘
pattern modifiers
]
здесь неизвестный модификатор, потому что он появляется после закрытия >
. Вот почему PHP выдает эту ошибку.
В зависимости от шаблона, анонимная жалоба-модификатор также могла быть о *
, +
, p
, /
или )
или почти любую другую букву / символ. Только imsxeADSUXJu
являются действительными модификаторами PCRE .
Исправить легко. Просто оберните шаблон регулярного выражения любыми действительными разделителями. В этом случае вы можете выбрать ~ и получить следующее:
~<div[^>]*><ul[^>]*>~
│ │
│ └─ ending delimiter
└───────────────────── starting delimiter
Если вы получаете эту ошибку, несмотря на использование разделителя, возможно, это связано с тем, что сам шаблон содержит несвязанные вхождения указанного разделителя .
/foo[^/]+bar/i
, несомненно, вызовут ошибку. Таким образом, вы можете избежать этого, используя обратную косую черту, если она появляется в любом месте регулярного выражения:
/foo[^\/]+bar/i
│ │ │
└──────┼─────┴─ actual delimiters
└─────── escaped slash(/) character
Это утомительная работа, если ваш шаблон регулярного выражения содержит так много вхождений символа разделителя.
Более чистым способом, конечно же, было бы использование другого разделителя. В идеале символ, который нигде не встречается внутри шаблона регулярного выражения, скажем #
- #foo[^/]+bar#i
.
preg_quote()
)