нужно из текста выделить такую строку:
<coverpage><image l:href="#cover.jpg"/></coverpage>
составил регэксп @"<coverpage><image l:href=""#(.*?)""/></coverpage>"
совпадений нет
проверил на сайте https://regex101.com/r/zcTpqR/2
работает, правда вот такой \" вариант кавычек, а в проге не работает
"<coverpage><image l:href=\"#(.*?)\"/></coverpage>"
UPD:
xdoc = new XDocument();
xdoc = XDocument.Load(opf.FileName);
string xdocstr = xdoc.ToString();
string t1 = Regex.Replace(xdocstr, @"<FictionBook[^>]*>", "<FictionBook>");//убираю неймспейсы потому что уже голова болит от возни с ними
MatchCollection mcol = Regex.Matches(t1, @"<coverpage><image l:href=""#(.*?)""/></coverpage>");
string coverStr = "";
foreach (Match m in mcol)
{
coverStr += m.Groups[1].Value + "\n";//строка пустая
}
Весь текст книги не буду выкладывать, он большой. Если пригодится то вот полный файл https://yadi.sk/d/NKpYCB4UoZlXLw
<?xml version="1.0" encoding="utf-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
<description>
<title-info>
<genre>sf</genre>
<author>
<first-name>Айзек</first-name>
<last-name>Азимов</last-name>
</author>
<book-title>Профессия</book-title>
<annotation>
<i>
На Земле, по прошествии 4-5 тысяч лет система образования, естественно, претерпела массу изменений и нововедений. В восемь лет все дети должны были пройти День Чтения, когда соответствующая программа с ленты, обучающей чтению, за 15 минут переписывалась в мозг ребенка. В 18 лет на Дне Знаний компьютер выбирал для человека его оптимальную профессию и закладывал в его мозг соответствующую программу. Затем каждый год проводились Олимпиады, где планеты, требующие специалистов, отбирали себе лучших.
Джордж Пленетей страстно хотел стать программистом и тайком от всех изучал книги по програмированию. Но в 18 лет в День знаний компьютер выбрал ему совсем другую специальность.
</i>
</annotation>
<date>1957</date>
<1-- вот это нужно достать -->
<coverpage><image l:href="#cover.jpg"/></coverpage>
<lang>ru</lang>
<src-lang>en</src-lang>
<translator>
<first-name>Светлана</first-name>
<last-name>Васильева</last-name>
</translator>
<sequence number='0' name='Шедевры фантастики'/>
</title-info>
Метод XDocument.ToString
возвращает форматированный xml с пробельными символами. Поэтому ваша регулярка ничего не находит.
var xdoc = XDocument.Load("test.xml");
string xdocstr = xdoc.ToString(); // здесь получаем форматированный xml
Вы уже сами нашли решение: добавить в шаблон пробелы \s*
.
Если вы используете регулярные выражения, то XDocument
вас не нужен. Можете полностью убрать его использование из кода.
Просто читайте из файла текст и работайте с ним.
var xml = File.ReadAllText(opf.FileName);
var pattern = @"<coverpage><image l:href=""#(.*?)""/></coverpage>";
var matches = Regex.Matches(xml, pattern);
Хотя и в этом случае следует учитывать пробельные символы. По стандарту они могут присутствовать в xml в любом месте с любом количестве. То есть они могут быть в самом файле изначально.
Но гораздо правильней работать с fb2 с помощью xml-парсеров. Регулярки при этом совершенно не нужны.
Достаточно определить имеющиеся в этом формате пространства имён и далее использовать их.
XNamespace fb = "http://www.gribuser.ru/xml/fictionbook/2.0";
XNamespace link = "http://www.w3.org/1999/xlink";
var xdoc = XDocument.Load("test.xml");
var images = xdoc.Descendants(fb + "coverpage").Elements(fb + "image");
string coverStr = null;
foreach (var image in images)
{
Console.WriteLine(image.Attribute(link + "href").Value);
coverStr += image.Attribute(link + "href").Value;
}
Обратите внимание: я просто присоединяю неймспейс к имени элемента: fb + "coverpage"
. Аналогично поступаем с атрибутом.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Существует модель размеров ProductSize, где есть свойства:
Есть функция которая проверяет привязку по железу, нужно её спрятать что бы при реверсе было сложнее отыскатьНужно что бы она выполнялась...