. net regex - строки, которые не содержат полной остановки, предшествующей последней `<item>` - Попытка 2 - PullRequest
0 голосов
/ 22 января 2020

Этот вопрос следует из . net regex - строк, которые не содержат полной остановки в последнем элементе списка

Проблема теперь в следующем. Обратите внимание, что примеры были изменены и добавлены - все должны быть удовлетворены. Хорошие примеры не должны возвращать совпадений, а плохие примеры должны возвращать совпадения.

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

В конце каждой строки данных есть разрывы строк и возврат каретки.

Схема используется для XML. У нас нет доступа к. Net коду - только пользователи, использующие пользовательское приложение.

Пример 1 с ошибками XML Данные - должны давать 1 совпадение:

<randlist prefix="unorder">
    <item>abc</item>
    <item>abc</item>
    <item>abc</item>
</randlist>

Пример 2 из плохих XML Данные - должны давать 1 совпадение:

<randlist prefix="unorder">
    <item>abc. abc</item>
    <item>abc. abc</item>
    <item>abc. abc</item>
</randlist>

Пример 1 из хороших XML Данные - регулярное выражение не должно давать совпадений - полная остановка, предшествующая последней </item>:

<randlist prefix="unorder">
    <item>abc</item>
    <item>abc</item>
    <item>abc.</item>
</randlist>

Пример 2 из хороших XML Данные - регулярное выражение не должно давать совпадений - полная остановка предшествует последней </item>:

<randlist prefix="unorder">
    <item>abc. abc</item>
    <item>abc. abc</item>
    <item>abc. abc.</item>
</randlist>

Шаблоны регулярных выражений, которые я пробовал, которые не работали (либо ложные срабатывания, либо нет совпадений с использованием https://regex101.com/) для вышеуказанных критериев в плохих XML данных (не проверено на хороших XML данных):

^<randlist \w*=[\S\s]*\.*[^.]*<\/item>[\n]*<\/randlist>$
^\s+<item>[^<]*?(?<=\.)<\/item>$

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Шаблон регулярного выражения ниже работает для нас - проверено в Notepad ++

[^.]<\/item>\s{1,2}<\/randlist>
0 голосов
/ 22 января 2020

Видя, как вы используете. NET, вы можете:

  1. Загрузить файл XML в XML документе.
  2. Использовать GetElementsByTagName метод для получения всех ваших item тегов в элементе randlist.
  3. Получите последний элемент, возвращаемый [2].
  4. Проверьте, содержит ли он символ точки .

Выше должно быть более читабельным, и если структура XML изменится, вам не придется переписывать половину вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...