Для __init__.py
your_package/
__init__.py
file1.py/
file2.py/
...
fileN.py
# in __init__.py
from file1 import *
from file2 import *
...
from fileN import *
# in file1.py
def add():
pass
, тогда другие могут вызывать add () с помощью from your_package import add
без знания файла1, например from your_package.file1 import add
import logging.config
logging.config.dictConfig(Your_logging_config)
я полагаю, что опция использовать RegexOptions.Singleline
вместо RegexOptions.Multiline
( src). разрешение (.) соответствовать новым строкам должно работать в Вашем случае.
... режим, где точка также соответствует новым строкам, называют "однострочным режимом". Это немного неудачно, потому что легко путать этот термин с "многострочным режимом". Многострочный режим только влияет на привязки, и однострочный режим только влияет на точку... При использовании regex классов платформы.NET Вы активируете этот режим путем определения RegexOptions. Одна строка, такой как в Regex. Соответствие ("строка", "regex", RegexOptions. Одна строка).
regex символ "." никогда не соответствует новой строке, даже с MultiLine
, опция установлена. вместо этого, необходимо использовать [\s\S]
или другая комбинация с соответствиями что-либо.
MultiLine
опция только изменяет поведение ^ (начните из строки вместо этого fo, начинаются из строки), и $ (конец строки вместо конца строки)
BTW: Действительно, regex не является правильным способом просканировать HTML...
Если у Вас все еще есть проблемы с этим, это может быть, потому что Вы используете И со своим RegexOptions вместо ИЛИ.
Этот код является неверным и передаст нуль как второй параметр конструктору:
Regex regExp = new Regex(@"<sys:customtag(.*?)Processtart(.*?)/>(.*?)<sys:customtag (.*?)Procesend(.*?)/>",
RegexOptions.Multiline & RegexOptions.IgnorePatternWhitespace & RegexOptions.CultureInvariant);
Этот код является правильным (насколько использование нескольких флагов RegexOptions):
Regex regExp = new Regex(@"<sys:customtag(.*?)Processtart(.*?)/>(.*?)<sys:customtag (.*?)Procesend(.*?)/>",
RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.CultureInvariant);
RegExp является плохим инструментом для xml... мог Вы не, выступы загружают его в XDocument / XmlDocument и используют xpath? При разъяснении модификаций, Вы хотите сделать, я ожидаю, что мы можем восполнить пробелы..., пространства имен являются, вероятно, главным сделать это комплексом в этом случае, таким образом, мы просто должны использовать XmlNamespaceManager
.
Вот пример, то есть, предоставленный, более сложный, чем просто regex - однако, я ожидал бы, что это справится намного лучше с нюансами xml:
string xml = @"<foo xmlns:sys=""foobar""><bar/><bar><sys:customtag sys:sid=""1"" sys:type=""Processtart"" />
<sys:tag>value</sys:tag>
here are some other tags
<sys:tag>value</sys:tag>
<sys:customtag sys:sid=""1"" sys:type=""Procesend"" /></bar><bar/></foo>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNamespaceManager mgr = new XmlNamespaceManager(new NameTable());
mgr.AddNamespace("sys", "foobar");
var matches = doc.SelectNodes("//sys:customtag[@sys:type='Processtart']", mgr);
foreach (XmlElement start in matches)
{
XmlElement end = (XmlElement) start.SelectSingleNode("following-sibling::sys:customtag[@sys:type='Procesend'][1]",mgr);
XmlNode node = start.NextSibling;
while (node != null && node != end)
{
Console.WriteLine(node.OuterXml);
node = node.NextSibling;
}
}