Регулярное выражение для любых символов би-граммы - PullRequest
1 голос
/ 11 апреля 2019

Предположим, у меня есть текст, составленный из любых символов, например:

string = 1234abdchdj星期上午十时*&()

Я хочу найти биграммы символов с регулярным выражением, чтобы получить вывод вроде:

12, 23, 34, ab, bd, ...

Я на самом деле использую следующее, с python и regex:

bigrams = re.findall('(?=(\S\S))', string)

но это дает мне неправильный вывод , поскольку он пропускает символы и фактически дает мне половину необходимых мне би-граммов:

12, 34, ab, dc, ...

Надеюсь, я достаточно ясно, заранее спасибо

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

Другая альтернатива - использовать zip, это, вероятно, самый питонический способ сделать это.

string = "1234abdchdj星期上午十时*&()"

for a, b in zip(string, string[1:]):
  print(a, b)

В зависимости от того, что вы хотите сделать для последнего символа ), вы также можете использовать zip_longest:

from itertools import zip_longest

for a, b in zip_longest(string, string[1:], fillvalue="-"):
  print(a, b)

Будет печататься так же, как и до добавления строки, содержащей ) - в конце.

Если вам нужно сэкономить немного памяти, вы даже можете использовать islice:

from itertools import islice
string = "1234abdchdj星期上午十时*&()"

for a, b in zip(string, islice(string, 1, None)):
  print(a, b)

Классический срез [1:] создает второй массив, тогда как при этом создается итератор для того же массива. Но если вам действительно не нужно сохранять эту память, я бы придерживался string[1:].

1 голос
/ 12 апреля 2019

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

ans = [x[i:i+2] for i in range(0, len(x)-1, 2)]

1 голос
/ 11 апреля 2019

Вместо этого вы можете попробовать:

s = 'abcdef'
for i in range(len(s)-1):
    print(s[i:i+2])

или даже лучше:

s = 'abcdef'
a = ''
for b in s:
    if a:
        print(a+b)
    a = b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...