Соответствие пробела между вхождениями в Regex - PullRequest
0 голосов
/ 17 марта 2020

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

пример выглядит следующим образом:

Я хочу сопоставить все следующие сценарии ios:

60 ml ( 1)
60ML (2 )
60ml(2) (a)

регулярное выражение, которое я использовал:

(60\s?(?:ml)\s?(?:\w|\(.{0,3}\)){0,5})

ссылка на пример: ссылка на регулярное выражение

регулярное выражение соответствует первым 2 примерам, но не в тех случаях, когда между (2) и (a) есть пробел.

будет приветствоваться любое руководство.

1 Ответ

2 голосов
/ 17 марта 2020

Ваше регулярное выражение не учитывает пробелы между группами в скобках (2) и (a) в последнем примере. Вы можете добавить <space>*, чтобы сделать это. Обратите внимание, что вы не можете использовать \s*, если вы не сопоставляете только одно значение за раз, в противном случае тот факт, что \s будет соответствовать символу новой строки, может привести к тому, что первое совпадение будет слишком длинным go.

(60\s?ml\s?(?:\w|\(.{0,3}\) *){0,5})

Обратите внимание, что подсчет повторений не имеет смысла. Например, это регулярное выражение будет соответствовать 60ML (2 )(a)(a)(a)(a) и 60ML (2 )(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a), возвращая 60ML (2 )(a)(a)(a)(a) в обоих случаях. Если это не то, что вам нужно, вам нужно добавить привязку к концу регулярного выражения (возможно, $), чтобы предотвратить его соответствие более длинной строке.

Демонстрация для регулярного выражения regex101

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