Regex с несколькими группами - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть следующая однострочная строка

10101010110001

Я хочу перехватить все 0 в интервале от 1 с

Я использовал следующее регулярное выражение:

/(10+1)/

это дало мне следующие группы:

  1. 101
  2. 101
  3. 10001

что не то, что я хочу, я хочу все группы ( даже если 1 уже зафиксировано в предыдущей группе):

  1. 101
  2. 101
  3. 101
  4. 101
  5. 10001

Ответы [ 2 ]

3 голосов
/ 13 февраля 2020

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

Чтобы обойти это, используйте положительный взгляд:

/1(0+)(?=1)/

Первый 1 будет использован при совпадении, но положительный взгляд предотвращает участие второго «1» в матче. просто утверждает , что "1" есть

См. ваш пример здесь на Regex101

1 голос
/ 13 февраля 2020

из 10101010110001, вы НЕ можете получить

101
101
101
101
10001

причина: символ (здесь 1) НЕ может быть использован дважды.

, но может

  • возможно 1: используйте (?<=1)(0+)(?=1) для получения:
0
0
0
0
000
  • возможно 2: используйте (?<=1)(0+)1 для получения:
01
01
01
01
0001
  • возможно 3: используйте 1(0+)(?=1), чтобы получить:
10
10
10
10
1000

Примечание: вы можете использовать этот веб-сайт

https://regexr.com

для отладки вашего регулярного выражения

для других инструментов можете обратиться к моему (китайскому) учебнику: 则 则 调试 工具 · 应用 广泛 的 超强 搜索 : 正 则 表达式

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