У меня есть текстовый файл, из которого мне нужно извлечь определенные элементы данных.

Пример текста:

<url>
    <loc>https://example.com/example0.html</loc>
    <lastmod>2019-01-22</lastmod>
    <priority>0.5</priority>
</url>
<url>
    <loc>https://example.com/example1.html</loc>
    <lastmod>2019-01-21</lastmod>
    <priority>0.5</priority>
</url>
<url>
    <loc>https://example.com/example2.html</loc>
    <lastmod>2019-01-21</lastmod>
    <priority>0.5</priority>
</url>
<url>
    <loc>https://example.com/example3.html</loc>
    <lastmod>2019-01-20</lastmod>
    <priority>0.5</priority>
</url>
<url>
    <loc>https://example.com/example4.html</loc>
    <lastmod>2019-01-20</lastmod>
    <priority>0.5</priority>
</url>

Я хочу извлечь:

https://example.com/example0.html
https://example.com/example1.html
https://example.com/example2.html
https://example.com/example3.html
https://example.com/example4.html

Пожалуйста, имейте в виду, что дата не является статичной

2 ответа2

1

Там может быть более простой способ, и у меня нет доступа к Notepad++ сейчас, но вы можете попробовать следующее

Поиск: <url>\n\s+<loc>(.*)<\/loc>\n\s.*\n\s.*\n<\/url>

Заменить: \1

Источник regexr.com/46rin

0
  • Ctrl+H
  • Найдите что: <url>\s+<loc>(\S+?)</loc>.+?</url>
  • Заменить на: $1
  • проверить обернуть
  • проверьте регулярное выражение
  • ПРОВЕРЬТЕ . matches newline
  • Заменить все

Объяснение:

<url>       # literally
  \s+       # 1 or more any spaces, including linebreak
  <loc>     # literally
  (\S+?)    # group 1, 1 or more non spaces, not greedy
  </loc>    # literally
  .+?       # 1 or more any characters, not greedy
</url>      # literally

Замена:

$1          # content of group 1, the URL

Результат для данного примера:

https://example.com/example0.html
https://example.com/example1.html
https://example.com/example2.html
https://example.com/example3.html
https://example.com/example4.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .