您需要从文本中提取以下行:
<coverpage><image l:href="#cover.jpg"/></coverpage>
编译了一个正则表达式,没有
在网站https://regex101.com/r/zcTpqR/2@"<coverpage><image l:href=""#(.*?)""/></coverpage>"
上检查
匹配
它可以工作,虽然这个 \" 引号变体,但在程序中不起作用
"<coverpage><image l:href=\"#(.*?)\"/></coverpage>"
升级版:
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。因此,您的正则表达式找不到任何东西。您自己已经找到了解决方案:在模板中添加空格
\s*
。如果您使用正则表达式,则
XDocument
不需要。您可以从代码中完全删除它的使用。只需从文件中读取文本并使用它。
虽然在这种情况下,应该考虑空白字符。根据标准,它们可以以任意数字出现在 xml 中的任何位置。也就是说,它们最初可以在文件本身中。
但是使用 xml 解析器使用 fb2 会更正确。完全不需要监管机构。
确定以这种格式可用的命名空间然后使用它们就足够了。
请注意,我只是将命名空间附加到元素名称:
fb + "coverpage"
。我们对属性做同样的事情。