Регулярное выражение, которое находит строку, которая не начинается с "с до номера - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть такая строка.

1 2 3 4 5 "Test test"

1 2 3 4 5 Test test"

Мне нужно найти вторую строку, которая не начинается с "и прежде, чем иметь номера.

Я читаю много тем из стека переполнение, но я не могу найти ответ для меня. Reg exp должен работать над кодом Visual Studio для TXT. Большое спасибо за вашу помощь

Я пытался:

^(?![0-9]+\t[0-9]+\t[0-9]+\t[0-9]+\t[0-9]+")

но это не так не работает.

Ответы [ 3 ]

1 голос
/ 14 апреля 2020

Может быть сложно сопоставить то, чего нет, потому что все , которое не соответствует шаблону, соответствует отрицанию этого шаблона.

Вы ищете для последовательностей цифр, сопровождаемых сериями пробелов, и эта последовательность сама повторяет

(\d+\s+)+

Вы хотите, чтобы за вышеприведенным следовало что-нибудь .*, что не начинается с ди git, пробел или символ двойной кавычки [^\d\s"].

([^\d\s"])

Соберите все вместе

(\d+\s+)+([^\d\s"].*)

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

(?:\d+\s+)+(?:[^\d\s"].*)
1 голос
/ 14 апреля 2020

Я сделал следующие предположения о том, что требуется:

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

Это можно проверить с помощью следующего регулярного выражения.

^(?:\d+ +)+[^"\d ].*$

Демо

Как показано на ссылке, это регулярное выражение соответствует последним трем строкам ниже, но не первым трем.

1 2 3 4 5 "Test test
11 22 33 44 "Test test"
 11 22 33 44 The test"

1 2 3 4 5 Test test"
1 2 3 4 5 The "Test test"
11 22 33 44    The "Test test"
0 голосов
/ 14 апреля 2020

Ты очень близко. Вам нужно изменить внешний [] на (). Вам также нужно поставить .* после отрицательного предпросмотра, чтобы соответствовать остальной части строки при сбое упреждения.

И у вас нет вкладок между числами, у вас есть пробелы, поэтому \t должен быть \s.

^(?![0-9]+\s[0-9]+\s[0-9]+\s[0-9]+\s[0-9]+\s+").*

DEMO

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