Swift RegEx для повторения символов [дубликат]

Вы можете попробовать что-то похожее на то, что предложил Тим Даун, но вместо того, чтобы иметь элементы для каждого пикселя на экране, создайте всего 2-4 элемента (ячейки) и измените их местоположение, ширину и высоту динамически, чтобы разделить все возможное места на экране на 2-4 рекурсивно, таким образом быстро обнаруживая реальное местоположение мыши.

Например - первые элементы занимают правую и левую половину экрана, а затем верхнюю и нижнюю половину. К настоящему времени мы уже знаем, в какой четверти экрана находится мышь, можно повторить - обнаружить, какая четверть этого пространства ...

43
задан KL-7 11 July 2012 в 11:49
поделиться

3 ответа

findall не дает совпадающих совпадений по умолчанию. Однако это выражение:

>>> re.findall(r'(?=(\w\w))', 'hello')
['he', 'el', 'll', 'lo']

Здесь (?=...) - это утверждение lookahead :

(?=...) соответствует, если ... соответствует затем, но не потребляет ни одной из строк. Это называется ожидаемым утверждением. Например, Isaac (?=Asimov) будет соответствовать 'Isaac ', только если за ним следует 'Asimov'.

72
ответ дан notpeter 16 August 2018 в 01:03
поделиться

Вы можете использовать новый модуль регулярного выражения Python , который поддерживает совпадающие совпадения.

>>> import regex as re
>>> match = re.findall(r'\w\w', 'hello', overlapped=True)
>>> print match
['he', 'el', 'll', 'lo']
23
ответ дан David C 16 August 2018 в 01:03
поделиться

За исключением утверждения с нулевой длиной, символ на входе всегда будет потребляться при сопоставлении. Если вы когда-либо находитесь в случае, когда вы хотите захватить определенный символ во входной строке больше один раз, вам понадобится утверждение нулевой длины в регулярном выражении.

Существует несколько утверждений с нулевой длиной (например, ^ (начало ввода / строки), $ (конец ввода / строка), \b (граница слова)), но look-arounds ((?<=) позитивный внешний вид и (?=) позитивный прогноз вперед ) - это единственный способ захватить перекрывающий текст из ввода. Отрицательные взгляды ((?<!) негативный внешний вид, (?!) негативный взгляд вперед] здесь не очень полезны: если они утверждают, что истина, то захват внутри потерпел неудачу; если они утверждают false, то совпадение не выполняется. Эти утверждения являются нулевой длиной (как упоминалось ранее), что означает, что они будут утверждать, не потребляя символы во входной строке. Они будут фактически соответствовать пустой строке, если утверждение прошло.

Применяя указанное выше знание, регулярное выражение, которое работает для вашего случая, будет:

(?=(\w\w))
7
ответ дан nhahtdh 16 August 2018 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: