Regex, чтобы найти строку, которая не содержит пробела при сопоставлении с другими условиями - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть несколько строк, которые могут содержать определенные шаблоны. В частности, следующие 3.

  1. Начинается с (-, за которым следуют 10 цифр, затем ).

    например:.

    (- 1234567890)

  2. Начинается с (, заканчивается ) и может содержать 1 или более символов, но NO пробел.

    например:.

    (ABC) или (AF33) или (2345)

  3. Начинается с (, заканчивается ) и может содержать 1 или более символов, ВКЛЮЧАЯ пробелы.

    например:.

    (Некоторая строка)

Строки, с которыми я работаю, могут содержать ноль или более шаблонов, указанных выше. Мое требование должно соответствовать ТОЛЬКО второму сверху в данной строке, и я хотел бы иметь возможность использовать Regex класс в C #.

Например, скажем, у меня есть пять различных строк.

Это случайный текст.

Это некоторый (ABC) случайный (-1234567890) текст.

Это некоторый (XY12) случайный (-1234567890) текст.

Это некоторый (содержит пробел) случайный (-1234567890) текст.

Это некоторый () случайный текст.

Мой Regex должен соответствовать только 2-й и 3-й строкам из приведенного выше списка.

Пока мне удалось написать следующее регулярное выражение, исключающее строки 1 и 5.

.*\((?!\-).+\).*

Это соответствует 2-й, 3-й, И 4-й строки выше. Теперь я не уверен, как я могу получить его, чтобы исключить 4-й, который содержит пробелы в скобках. Я знаю, что \S обнаруживает пробелы, но как я могу сказать ему обнаруживать строки, которые не содержат пробелов только в скобках, которые не содержат - после первого (?

РЕДАКТИРОВАТЬ 1:

В моих строках никогда не будет вложенных скобок.

РЕДАКТИРОВАТЬ 2:

Вот Regex Tester .

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018
\(([^- ]+[^ ]*)\)

должно работать

Пояснение:

[^- ]+ сначала будет соответствовать одному символу, который не является ни -, ни . Таким образом, он будет содержать хотя бы один символ

Тогда [^ ]* будет соответствовать 0 или более ни одного символа пробела

Это будет работать для любого набора символов

0 голосов
/ 28 апреля 2018
.*\(\w+\).*

Если вы используете приведенное выше регулярное выражение, вторая и третья строки являются только совпадениями

. * Все символы

(фарантез

\ w + все символы слова (хотя бы один)

) Фарантез

. * Все символы

...